Par*_*bay 3 monads haskell 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
Run Code Online (Sandbox Code Playgroud)
我有Haskell的基本知识(很长一段时间没用过它),但这个签名看起来不对.
我安装了GHC并检查了它的想法 - 结果它认为我做了什么,即:
:t bind
bind :: (t1 -> t) -> W t1 -> t
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Haskell的类型推断器总是考虑最一般的签名.因为在你的实现中,bind你没有做任何将参数赋予f任何比任何类型的函数更具体的东西到任何其他类型(非具体W b),即具有签名a -> b(或者t1 -> t,如引用者所写),当然它就是这样.
换句话说,签名(a -> b) -> W a -> b是严格的更一般的版本(a -> W b) -> (W a -> W b).
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |