gpt4 book ai didi

haskell - 为什么 Haskell 中没有 `Cofunctor` 类型类?

转载 作者:行者123 更新时间:2023-12-03 15:27:56 24 4
gpt4 key购买 nike

单子(monad)得到 fmap来自 Functor类型类。为什么comonads不需要cofmap Cofunctor 中定义的方法类(class)?

最佳答案

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 的原因不存在。 “'一般仿函数'的双重概念仍然是'一般仿函数'”。

由于 FunctorCofunctor是相同的,单子(monad)和共单子(monad)都是使用 Functor 定义的.但是不要让这让你认为单子(monad)和共单子(monad)是一回事,它们不是。

一个单子(monad)被定义(简化)为:
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)

关于haskell - 为什么 Haskell 中没有 `Cofunctor` 类型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com