簡體   English   中英

什么是分類單子強制 Haskell 單子不強制的身份?

[英]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 不強制執行由分類單子滿足的恆等式。

這些是上面文字所說的身份嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM