[英]What are the identities categorical monads enforce that Haskell monads don't?
http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
寫道:
如果您沒有猜到,這是關於 monad,因為它們出現在 Haskell 等純函數式編程語言中。 它們與范疇論的單子密切相關,但並不完全相同,因為 Haskell 不強制執行由分類單子滿足的恆等式。
這些是上面文字所說的身份嗎?
return a >>= k = k a
m >>= return = m
m >>= (\x -> k x >>= h) = (m >>= k) >>= h
與鏈接問題的公認答案相比,請考慮這個例子。
newtype List a = List [a] deriving (Functor, Applicative)
instance Monad List where
return _ = List []
m >>= f = List []
編譯器會接受這個定義,但它不遵守單子定律。 具體來說,嘗試確認
m >>= return == m
對於[]
和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 []
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.