那种`*`可以被认为是'ob(Hask)`吗?

时间:2017-05-22 02:56:22

标签: haskell category-theory

如果 Hask 是所有haskell类型的类别(函数为箭头),那么我们可以想到ob(Hask)(即 Hask <的对象集合/ strong>)等于*

如果没有,那么这是错误的吗?

2 个答案:

答案 0 :(得分: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 existsee ensuing discussion)或者可能会抛出seq或者可能完全放弃。

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

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

这绝不是你可以用Haskell程序建模的唯一类别,但我们这样做并用Hask名称来保佑它,因为很多其他概念自然地对应于Haskell计算。例如,此类别的endofunctor可以方便地用类似的东西表示⭑ - &gt; ⭑({合法)函数采用fmap :: ((a :: ⭑) -> (b :: ⭑)) -> ((f a :: ⭑) -> (f b :: ⭑))

答案 1 :(得分:0)

是的,但是Haskell中*以外的其他类型的DataKinds类型与 Hask 类别不一致。

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

'Bar类型为Foo,因此您无法使用->,因此它会在 Hask 但仍然是Haskell类型。