gpt4 book ai didi

haskell - 管理 IO monad

转载 作者:行者123 更新时间:2023-12-03 14:38:55 25 4
gpt4 key购买 nike

我正在学习一些 Haskell(请原谅新手错误)-

这个例程出错了。我对 do & <- 语法的理解是它们从 monad 中提取非 Monad 类型。所以这种理解是有缺陷的:这里的正确理解是什么?

exister :: String -> Bool
exister path = do
fileexist <- doesFileExist path
direxist <- doesDirectoryExist path
return fileexist || direxist

错误
ghc -o joiner joiner.hs

joiner.hs:53:2:
Couldn't match expected type `Bool' against inferred type `m Bool'
In the first argument of `(||)', namely `return fileexist'
In the expression: return fileexist || direxist
In the expression:
do { fileexist <- doesFileExist path;
direxist <- doesDirectoryExist path;
return fileexist || direxist }

最佳答案

第一个问题:线路return fileexist || direxist被解析为 (return fileexist) || direxist , 你不能通过 m Bool作为 || 的第一个参数.将其更改为 return (fileexist || direxist) .

第二个问题:您声明了 exister 的返回类型是 Bool ,但编译器推断它必须是 IO Bool .修理它。 (do<- 语法允许您从 a 值中提取 m a 值,但前提是您 promise 返回 m a 值。)

关于haskell - 管理 IO monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com