haskell - 如何在 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
解决方案
main
被声明为具有类型IO ()
(这是正确的)。任何函数中的最后一个表达式都是返回值。此特定代码返回 的结果checkArgCount args
,即Int
。
Int
值不是IO ()
值,因此不会进行类型检查。
您应该将 的类型更改checkArgCount
为返回()
或IO ()
,或者添加更多代码来main
使用Int
返回的checkArgCount
。
推荐阅读
- javascript - 如何创建 UI 菜单来更改 javascript tampermonkey 脚本中的设置?
- batch-file - 在一行上运行多个 CMD 命令
- vue.js - Nuxt + SurveyJS:使用 nuxt generate 或 nuxt build 时 - 超出最大调用堆栈大小
- timer - 可以在launchctl中随机化StartInterval吗?
- twitter-bootstrap - 如何让自动完成功能在 JetBrains IDE 中为 Bootstrap 5 工作
- types - 错误[E0308]:预期类型不匹配 `()`,发现 `bool`。如何消除此错误?
- angular - 如何在 Angular 中为调试和生产复制不同的 web.config 文件?
- python - 如何每次更改 2d numpy 数组的不同元素
- python - 使用字典时出现“'builtin_function_or_method' 不可下标”错误
- node.js - 出现解析错误,找不到 eslint 文件