【发布时间】:2014-01-08 12:42:38
【问题描述】:
我试图理解 Haskell 中的 Monad,在我无数次代码实验中,我遇到了这个问题:
f2 = do
return "da"
以及它不想在编译时出现关于类型的巨大错误这一事实。我认为唯一重要的部分是:
No instance for (Monad m0) arising from a use of return'
The type variable `m0' is ambiguous
然后我将代码更改为:
f2 = do
return "da" :: IO [Char]
而且效果非常好。但是当我试图搞砸一点并将类型更改为 IO Int 时,它又是一个错误。那么为什么类型实际上不是“模棱两可”呢? 另外,当我在返回之前添加一些内容时:
f2 = do
putStrLn "das"
return 2
那我就不用指定返回的类型了。 那么有人可以解释一下到底发生了什么吗?另外为什么在第一种情况下返回输出“da”?没有“”就不行吗?
【问题讨论】:
-
感谢您编辑我的东西 jozefg 我自己都在努力做到这一点!
-
没问题,欢迎使用stackoverflow和Haskell :)
-
这接近于最小的可能类型错误消息,加上友好的编译器提供的一些额外建议。类型错误可能会变得更大!
标签: haskell types return monads