白monoid是monoid,白monoid非monoid

Monad有两种定义,一种是1个endofunctor + 2个特殊的natural transformations,另外一种是一个Monoid。但是很多关于Monoid的解读,是一个有着特殊限定的集合,那么问题来了,Monad到底是个set还是个endofunctor呢?

一般关于Monoid的定义:

定义1:wiki link Suppose that S is a set and∙•is some binary operation S×S→S, then S with•is a monoid if it satisfies the following two axioms:

      Associativity:

          For alla,b,c∈Sa,b,c∈S, the equation(a∙b)∙c=a∙(b∙c)(a•b)•c=a•(b•c)holds.

      Identity element:

          There exists an element e∈S such that for every element a∈S, the equations e•a=a•e=a hold.

奇怪不奇怪,怎么看,这个monoid都无法被认为是一个endofunctor,那么monad的定义的冲突在哪儿?

问题在这儿:

上面这个monoid的定义,并不是范畴论中monoid的定义,而是一个元素为set的category中monoid的定义,那么这个定义也只是描述怎样的set是一个monoid。准确的说,上述的定义的monoid,是一种monoid,但范畴论中的monoid的元素,并非一定是set,比如,在函数式编程中的类型范畴,其元素就是类型。概括的说,就是白马是马,白马非马。

那范畴论中的monoid是什么呢?看下面的定义

定义2:wiki link In category theory, a monoid (or monoid object)(M,μ,η)in a monoidal category(C,⊗,I)(C,⊗,I) is an object M together with two morphisms

        μ:M⊗M→Mμ:M⊗M→Mcalled multiplication,

        η:I→Mη:I→Mcalled unit

根据这个定义,当这个范畴特化为元素为集合, 那么一个monoid就是定义1中的monoid;当范畴特化为元素为[函数式编程中的类型的endofunctors]范畴时,那么一个monoid,就是一个functor+2个特殊的自然变换

你可能感兴趣的:(白monoid是monoid,白monoid非monoid)