如何修复 Haskell 中的“无法将预期类型 IO a0 与 int 匹配”?
How to fix ''couldn't match expected type IO a0 with int'' in Haskell?
checkArgCount args
行给我带来了麻烦。 args
是一个类型 [String]
不是吗?我很困惑为什么它会给我错误。
import System.IO
import Data.List
import System.Environment --for command line args
--Checks if number of arguments provided is 2
checkArgCount ::[String] -> Int
checkArgCount a = if (length a) == 2 then 2 else error "No arguments"
main :: IO()
main = do
args <- getArgs
checkArgCount args
main
声明为 IO ()
类型(正确)。任何函数中的最后一个表达式都是 return 值。此特定代码 return 是 checkArgCount args
的结果,即 Int
。
Int
值不是 IO ()
值,因此不会进行类型检查。
您应该将 checkArgCount
的类型更改为 return ()
或 IO ()
,或者向 main
添加更多使用 Int
return编辑者 checkArgCount
.
是,args :: [String]
,但 checkArgCount args
必须具有类型 IO ()
,作为 do
块中的最后一行,整体类型为 IO ()
。
所以这是关于输出类型,而不是该函数的输入类型。
在 if
的结果中将 2
更改为 print 2
应该可以修复它(当然还要更改 checkArgCount
的类型签名以适应更改)。
args <- getArgs
if (length args) /= 2
then return()
else do -- ..continue coding
事实证明解决方案要简单得多
checkArgCount args
行给我带来了麻烦。 args
是一个类型 [String]
不是吗?我很困惑为什么它会给我错误。
import System.IO
import Data.List
import System.Environment --for command line args
--Checks if number of arguments provided is 2
checkArgCount ::[String] -> Int
checkArgCount a = if (length a) == 2 then 2 else error "No arguments"
main :: IO()
main = do
args <- getArgs
checkArgCount args
main
声明为 IO ()
类型(正确)。任何函数中的最后一个表达式都是 return 值。此特定代码 return 是 checkArgCount args
的结果,即 Int
。
Int
值不是 IO ()
值,因此不会进行类型检查。
您应该将 checkArgCount
的类型更改为 return ()
或 IO ()
,或者向 main
添加更多使用 Int
return编辑者 checkArgCount
.
是,args :: [String]
,但 checkArgCount args
必须具有类型 IO ()
,作为 do
块中的最后一行,整体类型为 IO ()
。
所以这是关于输出类型,而不是该函数的输入类型。
在 if
的结果中将 2
更改为 print 2
应该可以修复它(当然还要更改 checkArgCount
的类型签名以适应更改)。
args <- getArgs
if (length args) /= 2
then return()
else do -- ..continue coding
事实证明解决方案要简单得多