Ger*_*ely 4 monads haskell category-theory
http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
写道:
如果您没有猜到,这与单子有关,因为它们出现在像Haskell这样的纯函数式编程语言中。它们与范畴论的单子关系密切,但是由于Haskell并不强制分类单子满足的身份而并不完全相同。
以上文字是在谈论这些身份吗?
return a >>= k = k a
m >>= return = m
m >>= (\x -> k x >>= h) = (m >>= k) >>= h
Run Code Online (Sandbox Code Playgroud)
与链接问题的已接受答案对比,考虑一下此实例。
newtype List a = List [a] deriving (Functor, Applicative)
instance Monad List where
return _ = List []
m >>= f = List []
Run Code Online (Sandbox Code Playgroud)
编译器将接受此定义,但不遵守monad法则。具体来说,请尝试确认
m >>= return == m
Run Code Online (Sandbox Code Playgroud)
对于[]和List:
-- Correct
Prelude> [1,2,3] >>= return
[1,2,3]
-- Not correct, should be List [1,2,3]
Prelude> List [1,2,3] >>= return
List []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |