Haskell的绑定函数的类型是什么?

时间:2013-12-11 08:17:00

标签: haskell monads ghc

这里有一个非常受欢迎的monad解释:

http://blog.sigfpe.com/2007/04/trivial-monad.html

除了这部分我得到了所有东西:

bind :: (a -> W b) -> (W a -> W b)
bind f (W x) = f x

我对Haskell有基本的了解(很长一段时间没用过它),但这个签名似乎不对。

我安装了GHC并检查了它的想法 - 结果它认为我做了什么,即:

:t bind
bind :: (t1 -> t) -> W t1 -> t

我错过了什么?

1 个答案:

答案 0 :(得分:6)

Haskell的类型推断器总是考虑最一般的签名。因为在bind的实现中,你没有做任何将参数f赋予任何比任何类型的函数更具体的内容到任何其他类型(不具体) W b),即有一个签名a -> b(或t1 -> t,正如推荐人所写的那样),当然它就是这样。

换句话说,签名(a -> b) -> W a -> b(a -> W b) -> (W a -> W b)的严格更一般的版本。