该生产线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 ()
(这是正确的)。在任何函数的最后一个表达式的返回值。这种特殊的代码返回checkArgCount args
的结果,这是Int
。
一个Int
值不是IO ()
值,使之不键入检查。
您应该改变checkArgCount
类型返回()
或IO ()
,或添加更多的代码来main
使用由Int
返回checkArgCount
。
是的,args :: [String]
,但checkArgCount args
类型必须IO ()
,是与整体式do
的IO ()
块中的最后一行。
所以,它是关于输出类型,而不是输入类型的功能。
更改2
在print 2
的因之if
应该修复它(当然改变checkArgCount
的类型签名,以适应变化)。
args <- getArgs
if (length args) /= 2
then return()
else do -- ..continue coding
事实证明,简单得多的解决方案