【问题标题】:Can the kind `*` be thought of as `ob(Hask)`?`*` 可以被认为是 `ob(Hask)` 吗?
【发布时间】:2017-05-22 02:56:21
【问题描述】:

如果Hask是所有haskell类型的范畴(以函数为箭头),那么我们能不能想到ob(Hask)(即Hask的对象集合>) 等于*?

如果不是,这在什么意义上是错误的?

【问题讨论】:

    标签: haskell category-theory


    【解决方案1】:

    在这一点上,每次提出有关 Hask 的问题时链接到 Hask article on the Haskell wiki 肯定是某种陈词滥调,但就是这样。

    稍微扩展一下 wiki,我认为这个问题的答案很无聊,是的,但这只是因为 Hask 是 定义 的,因此 Hask 的对象是一种类型 ⭑。完整的定义是:

    • 让每一种类型 ⭑ 都成为 Hask 的对象,undefined 除外。我认为“是”基本上是您问题的答案,直到魔鬼的拥护者提出undefinedseq,此时答案必然变得越来越复杂。

    • A -> B类型的每个函数都是从A类型对应的对象到B类型对应的对象的箭头。

    • 非常小心choose a notion of equality for the arrows, which may or may not exist (see ensuing discussion) 或者扔掉seq 或者干脆放弃。

    • id :: A -> A对应的箭头为每个对象的标识箭头。

    • .,是关联的&c.,对应箭头的组成,必须是关联的&c.

    这绝不是您可以用来为 Haskell 程序建模的唯一类别,但我们这样做并以 Hask 名称祝福它,因为许多其他概念自然对应于 Haskell 计算。例如,该类别的内函子可以方便地表示为 ⭑ -> ⭑ 具有(合法的)函数采用 fmap :: ((a :: ⭑) -> (b :: ⭑)) -> ((f a :: ⭑) -> (f b :: ⭑))

    【讨论】:

      【解决方案2】:

      是的,但在 Haskell 中,除了 * 之外还有其他类型的类型,DataKinds 不属于您的 Hask 类别。

      {-# LANGUAGE DataKinds #-}
      data Foo = Bar
      

      'Bar 的种类是Foo,所以你不能和它一起使用->,所以它会在你的 Hask 之外,但仍然是 Haskell 类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-01
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多