Monadsfmap
来自typeclass Functor
。为什么comonads不需要cofmap
在Cofunctor
类中定义方法?
Functor
定义为:
class Functor f where
fmap :: (a -> b) -> (f a -> f b)
Cofunctor
可以定义如下:
class Cofunctor f where
cofmap :: (b -> a) -> (f b -> f a)
因此,两者在技术上是相同的,这就是为什么Cofunctor
不存在的原因。“'一般功能'的双重概念仍然是'一般功能'”。
由于Functor
和Cofunctor
相同,因此使用定义单子和共母Functor
。但是不要让那让您认为单子和共母是同一回事,它们不是。
将单声道定义为(简化)为:
class Functor m => Monad where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
comonad(再次简化)是否为:
class Functor w => Comonad where
extract :: w a -> a
extend :: (w a -> b) -> w a -> w b
注意“对称性”。
另一件事是逆函子,定义为:
import Data.Functor.Contravariant
class Contravariant f where
contramap :: (b -> a) -> (f a -> f b)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句