首页 > 解决方案 > 如何在 Haskell 中修复“无法将预期的 IO a0 类型与 int 匹配”?

问题描述

线路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

标签: haskellcommand-linecommand-line-arguments

解决方案


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

Int值不是IO ()值,因此不会进行类型检查。

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


推荐阅读