Monads = Functors + Idempotency(类型)?

-2 monads haskell

在Haskell中,Monads由kleisli triple定义.

在一般的分类理论中,可以这样说:

Monads = Functors + monadic 类型的幂等性(不是值)?

Dan*_*ner 8

不,monad强调不是幂等的:虽然要求有一个自然的转变

mu_x : T(T(x)) -> T(x)
Run Code Online (Sandbox Code Playgroud)

它是在一般的情况下,以这种方式选择的两个对象是相等的,即,

T(T(x)) = T(x)
Run Code Online (Sandbox Code Playgroud)

通常不会持有,甚至达到同构.

即使在Haskell的受限制的土地上,Monad也很容易看到这一点:Maybe (Maybe ())并且Maybe ()显然是不等的类型,具有不同数量的语义对象; 忽略底部:

Nothing, Just () -- Maybe ()
Nothing, Just Nothing, Just (Just ()) -- Maybe (Maybe ())
Run Code Online (Sandbox Code Playgroud)

或底部:

_|_, Nothing, Just _|_, Just () -- Maybe ()
_|_, Nothing, Just _|_, Just Nothing, Just (Just _|_), Just (Just ()) -- Maybe (Maybe ())
Run Code Online (Sandbox Code Playgroud)