Monad是一个幺半群,但它是一个不同于它的幺半群Integer.我不知道是否有写的方式Monoid',并Monad'使得这两个Integer和Monad'可表示为相同的实例Monoid'的类型类?
所以,让我们选择一个特定的方式Integer有Monoid
instance Monoid Int where
zero = 0
plus = (+)
Run Code Online (Sandbox Code Playgroud)
现在这是一个 Monad Monoid
{-# LANGUAGE FlexibleInstances #-}
instance Monad m => Monoid (Kleisli m a a) where
zero = id
plus = (.)
Run Code Online (Sandbox Code Playgroud)
而这是另一个
instance MonadPlus m => Monoid (m a) where
zero = mzero
plus = mplus
Run Code Online (Sandbox Code Playgroud)
然而,我不确定如何在Haskell中表达"Monad是endofunctors类别中的monoid".