Haskell monad不能执行的绝对类别monad的身份是什么?

Ger*_*ely 4 monads haskell category-theory

http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html

写道:

如果您没有猜到,这与单子有关,因为它们出现在像Haskell这样的纯函数式编程语言中。它们与范畴论的单子关系密切,但是由于Haskell并不强制分类单子满足的身份而并不完全相同。

以上文字是在谈论这些身份吗?

Haskell是否执行monad法律?

return a >>= k  =  k a
m >>= return  =  m
m >>= (\x -> k x >>= h)  =  (m >>= k) >>= h
Run Code Online (Sandbox Code Playgroud)

che*_*ner 7

与链接问题的已接受答案对比,考虑一下此实例。

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)