Functor
が定義されています。 「一般的なファンクタ」という二重の概念は、まだまだ「一般的なファンクタ」です。
Functor
とCofunctor
は同じであるため、Functor
を使用してモナドとコモノドの両方を定義します。しかし、モナドとコモノドが同じものだと思うようにしてはいけません。そうではありません。 comonad(再度、簡略化された)であるか否か
class Functor m => Monad where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
:
モナドは、定義されたように(簡略化)さ
class Functor w => Comonad where
extract :: w a -> a
extend :: (w a -> b) -> w a -> w b
注 "対称性"。 extract
与えられたとextend
あなたがfmap
とduplicate
を生成することができ、それが与えられたことに注意
class Functor w => Comonad w where
extract :: w a -> a
duplicate :: w a -> w (w a)
extend :: (w a -> b) -> w a -> w b
instance Applicative m => Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
join :: Monad m => m (m a) -> m a
、参考のため
import Data.Functor.Contravariant
class Contravariant f where
contramap :: (b -> a) -> (f a -> f b)
。両者には違いはありません。しかし、モナドとコモナドは異なっている。しかし、contravariant f =>(a - > b) - > f b - > f a'という型を持つ 'contramap'メソッドを持つ反変なファンクタのようなものがあります。しかし、それはcofunctorと同じではありません。 –
ファンクタの二重引用符(これは単なるファンクタなので、自己二重であるため)を意味しますか、または反変的なファンクタを意味しますか? http://math.stackexchange.com/questions/394472/is-cofunctor-an-accepted-term-for-contravariant-functors –