如果 Hask 是所有haskell类型的类别(函数为箭头),那么我们可以想到ob(Hask)
(即 Hask <的对象集合/ strong>)等于*
?
如果没有,那么这是错误的吗?
答案 0 :(得分:1)
此时,每当有关Hask的问题被提出时,它必须是某种陈词滥调来链接到Hask article on the Haskell wiki,但现在就是这样。
为了扩展wiki,我觉得这个问题的答案是非常无聊的,但只是因为Hask是定义的,所以Hask的对象是类型⭑。完整的定义是:
让每种类型的⭑都成为Hask的对象,undefined
除外。我认为“是”基本上是你的问题的答案,直到魔鬼的拥护者提出undefined
和seq
,此时答案必然变得越来越复杂。
让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
的箭头成为每个对象的标识箭头。
让.
,即关联&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类型。