美文网首页
stackoverflow上对monad(幺半群的解释)

stackoverflow上对monad(幺半群的解释)

作者: 刘刘刘月月啊 | 来源:发表于2018-08-18 14:30 被阅读0次

    All told, a monad in X is just a monoid in the category of endofunctors of X, with product × replaced by composition of endofunctors and unit set by the identity endofunctor.

    X here is a category. Endofunctors are functors from a category to itself (which is usually all Functors as far as functional programmers are concerned, since they're mostly dealing with just one category; the category of types--but I digress). But you could imagine another category which is the category of "endofunctors on X". This is a category in which the objects are endofunctors and the morphisms are natural transformations.

    And of those endofunctors, some of them might be monads. Which ones are monads? Just exactly the ones which are monoidal in a particular sense. Instead of spelling out the exact mapping from monads to monoids (since Mac Lane does that far better than I could hope to), I'll just put their respective definitions side by side and let you compare:

    A monoid is...

    A set, S

    An operation, • : S × S → S

    An element of Se : 1 → S

    ...satisfying these laws:

    (a • b) • c = a • (b • c), for all ab and c in S

    e • a = a • e = a, for all a in S

    A monad is...

    An endofunctor, T : X → X (in Haskell, a type constructor of kind * -> * with a Functor instance)

    A natural transformation, μ : T × T → T, where × means functor composition (also known as join in Haskell)

    A natural transformation, η : I → T, where I is the identity endofunctor on X (also known as return in Haskell)

    ...satisfying these laws:

    μ ∘ Tμ = μ ∘ μT

    μ ∘ Tη = μ ∘ ηT = 1 (the identity natural transformation)

    With a bit of squinting you might be able to see that both of these definitions are instances of the same abstract concept.

    相关文章

      网友评论

          本文标题:stackoverflow上对monad(幺半群的解释)

          本文链接:https://www.haomeiwen.com/subject/cwdfiftx.html