【发布时间】:2018-01-17 11:50:41
【问题描述】:
我正在尝试理解 monads 并阅读它的类型类定义:
class Monad m where
.
.
.
fail :: String -> m a
fail msg = error msg
现在,错误的定义是:
error :: [Char] -> a
在这种情况下类型系统不应该抱怨吗?作为
a /= m a
或者类型系统会自动假设错误的结果将被转换为
m a
不知何故?
提前致谢
【问题讨论】:
-
a与m a中的a不同。看到它就像error :: [Char] -> b,然后是b ~ m a。 -
这就解释了,非常感谢!
-
换句话说,
fail承诺它可以返回的类型集是error承诺它可以返回的类型集的严格子集。
标签: haskell