haskell - 打字判断有种类吗?

标签 haskell types polymorphism dependent-type type-kinds

在理查德·艾森伯格的 talk 中在他对依赖 Haskell 的 levity 多态性的工作中,他清楚地表明这个判断/类型是合理的:

type Star = (* :: (* :: (* :: *)))

这是否意味着打字判断本身就有种类* ?或者更灵活,在那*可能有 * 的类型返回的...来自 (* :: *) 的东西(我现在不确定)。

鉴于此假设,(* :: *) :: * ,这也意味着这种类型也将是关联的:
type Star = (((* :: *) :: *) :: *)

我认为这是不正确的。有人可以帮我澄清一下吗?

最佳答案

不,我认为你误解了正在发生的事情。 ::在类型级别就像 ::在值(value)层面。考虑:

three :: Int
three = 3 :: (Int :: *)

这只是 3 :: Int这只是 3 .已经在 Haskell + 友好的签名中你已经可以写:(((Int :: *) :: *) :: *)Int 相同.或者在普通的 Haskell 2010 中,(((3 :: Int) :: Int) :: Int) .以前,您受限于以“正确关联”的方式可以走多远,因为种类本身没有种类。公理* :: *改变那个。
::意味着它总是意味着什么。我不会查看 ::作为“返回”某些东西的运算符。这只是一段允许向类型检查器提供信息的语法,但在其他方面无关紧要。如果你真的,真的想把它看作某种运算符,它的行为就像 const尽管很难写下它的“类型”是什么。

关于haskell - 打字判断有种类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35999706/

相关文章:

scala - 如何在Clojure中模拟继承?

haskell - 类型类约束、多态性和木薯管道

haskell - `deleteBy` 没有最通用的类​​型有充分的理由吗?

python - 如果对象是任何函数类型,是否有一种通用的方法来检查 Python?

java - 为什么组合可以动态选择类型

c++ - RPC 调用返回一个递增的值而不是 ULONG_PTR

types - 类型 'float -> float' 与类型 'float' 不匹配

haskell - Yesod中的超时功能

syntax - 如何将 Haskell 转换为 F#?

Haskell IO 递归