Monad
是一个幺半群,但是它是一个与说不同的幺半群Integer
。我想知道是否有一种方法可以编写,并且Monoid'
可以将Monad'
两者都表示为同一类型类的实例?Integer
Monad'
Monoid'
问问题
447 次
2 回答
7
所以,让我们选择一种特定的Integer
方式Monoid
instance Monoid Int where
zero = 0
plus = (+)
现在这是一个Monad
Monoid
{-# LANGUAGE FlexibleInstances #-}
instance Monad m => Monoid (Kleisli m a a) where
zero = id
plus = (.)
这是另一个
instance MonadPlus m => Monoid (m a) where
zero = mzero
plus = mplus
但是,我不确定如何在 Haskell 中临时表达“Monad 是内函子类别中的幺半群”公式。
于 2013-06-20T05:22:16.960 回答
4
应 Tikhon 的要求,我将我的评论变成了答案。 这篇博文展示了如何使用种类多态性来统一Monad
和Monoid
在同一个类型类下。这与 Tel 的回答略有不同,因为 monad 是作为内函子类别中的幺半群实现的,而不是 Kleisli 类别中的幺半群。
于 2013-06-20T15:20:21.900 回答