如何解决“在Haskell”与诠释无法比拟预期型IO A0“”?

问题描述 投票:0回答:3

该生产线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
haskell command-line command-line-arguments
3个回答
4
投票

main被声明为具有类型IO ()(这是正确的)。在任何函数的最后一个表达式的返回值。这种特殊的代码返回checkArgCount args的结果,这是Int

一个Int值不是IO ()值,使之不键入检查。

您应该改变checkArgCount类型返回()IO (),或添加更多的代码来main使用由Int返回checkArgCount


4
投票

是的,args :: [String],但checkArgCount args类型必须IO (),是与整体式doIO ()块中的最后一行。

所以,它是关于输出类型,而不是输入类型的功能。

更改2print 2的因之if应该修复它(当然改变checkArgCount的类型签名,以适应变化)。


1
投票
args <- getArgs
     if (length args) /= 2
        then return()
        else do -- ..continue coding

事实证明,简单得多的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.