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

用户名

Monadsfmap来自typeclass Functor为什么comonads不需要cofmapCofunctor类中定义方法

贾·科巴尔

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相同,因此使用定义单子和共母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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在Haskell中没有函子上的等分词的类型类?

在Haskell中,为什么会有类型类层次结构/继承?

为什么Haskell基本库中没有“非空列表”类型?

为什么 Agda 中的 Haskell 类型类以“Raw”开头?

当我没有在原始类型定义中定义类型类约束时,为什么要添加它?

为什么在Haskell中没有runConst函数?

有没有办法通知Haskell在求和类型中解开类型类

为什么此代码中没有类型转换异常?

为什么在Python中没有提示self类型

为什么TypeScript中没有DOMRect类型?

为什么Swift中没有通用的基类?

为什么在RandomAccessFile类中没有readUnsignedInt?

为什么类中的javascript函数没有被吊起?

为什么不同的swift类中的函数没有被调用?

在Typescript中,为什么我的通用抽象类在尝试实现它时没有找到类型参数?

即使模板类没有基类,为什么`this`是类型相关的表达式?

Storable类型类在Haskell中做什么

Haskell中具有类型的冒险:GADT:为什么进行以下类型检查?

为什么String没有原始类型?

为什么文字值没有类型?

为什么没有内置类型的DateTime?

为什么没有HTMLNavElement类型?

为什么 Dart 中的 jsonDecode 没有类型也没有文档?

为什么没有React的“类”道具?

为什么这个类没有编译?

Rust中的特征与Haskell中的类型类有什么区别?

为什么Haskell不能推论这个多参数类型类?

为什么我的实体框架模型中没有类型类型的属性?

为什么 Rust 中的原始类型之间没有隐式类型转换(强制)