代码之家  ›  专栏  ›  技术社区  ›  Jonathan Sterling

所有Haskell函子都是内函子吗?

  •  30
  • Jonathan Sterling  · 技术社区  · 16 年前

    我有点困惑,需要有人帮我澄清一下。让我们概述一下我目前的理解:

    在哪里? E 是内函子 A

    E : A -> A.
    

    因为Haskell中的所有类型和态射都在 Hask 类别,不是任何 在Haskell也是 内函子 ? F : Hask -> Hask .

    我有一种很好的感觉,我错了,并且把它简单化了,我希望有人能告诉我我是个什么样的白痴。谢谢。

    3 回复  |  直到 8 年前
        1
  •  35
  •   C. A. McCann Ravikant Cherukuri    16 年前

    Functor s。在Haskell中使用范畴理论术语时,并不总是很清楚假设什么范畴。

    但是,默认的假设是 哈斯克 f 在A和B两种类型之间转换为函数F( f )在某些类型的F(A)和F(B)之间。

    如果我们只局限于那些映射任何类型的内函子 a 到类型 (f a) 哪里 f * -> * ,则可以将函数的关联映射描述为一个类型为的高阶函数 (a -> b) -> (f a -> f b) ,这当然是名为 函子 .

    然而,我们可以很容易地想象,在一个平面上表现良好的内函子 哈斯克 函子 ,例如映射类型的函子 Either a t 哈斯克 哈斯克 op公司

    函子 哈斯克 之间 . 例如,考虑一个发送类型的函子 Maybe a [a]

    category-extras package ,它提供了一些范畴理论启发的结构 而不是假设它的全部。

        2
  •  16
  •   Alexandre C.    16 年前

    Hask ,还有很多其他的分类可以建立 哈斯克 ,这对于当前的问题很有意义:

    • ^哦,那是 哈斯克 所有箭头反向
    • Hask * Hask ,它的函子是 双弯折器
    • 逗号类别,即对象是固定对象的变体 a
    • 函子范畴,态射是 自然变换
    • 代数范畴
    • 单倍体范畴
    • ...

    拿一份麦克·莱恩的 数学工作者的范畴 要有定义,试着自己去发现他们在Haskell中解决的问题。尤其是伴随函子(右范畴中的起始/终止对象)及其与单子的关系。

    你会看到,即使有一个大的类别( 哈斯克 ,或者“从 使用右箭头/products/…”,它封装了Haskell的语言选择,例如非严格性和懒散性),适当的派生类别是表达性的。

        3
  •  7
  •   Gian    16 年前

    “单子不必是内函子”一文中有一个可能与单子相关(或至少有趣)的讨论:

    http://www.cs.nott.ac.uk/~txa/publ/Relative_Monads.pdf

    推荐文章