10

Monadはモノイドですが、たとえば とは異なる方法でモノイドIntegerです。Monoid'とのMonad'両方IntegerMonad'同じ型クラスのインスタンスとして表現できるような書き方はあるのだろうMonoid'か。

4

2 に答える 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で「モナドはエンドファンクターのカテゴリーのモノイドである」という定式化をオフハンドで表現する方法がわかりません。

于 2013-06-20T05:22:16.960 に答える