打字判断有种类吗?
Do typing judgements have a kind?
在 Richard Eisenberg 的 talk 中,他对从属 Haskell 的轻度多态性进行了研究,他清楚地表明这种判断/类型是合理的:
type Star = (* :: (* :: (* :: *)))
这是否意味着打字判断本身就有种*
?或者更灵活,因为 *
可能 具有 *
或 返回的类型...来自 (* :: *)
(我现在不确定)。
鉴于此假设,(* :: *) :: *
,这也意味着此类型也将是关联的:
type Star = (((* :: *) :: *) :: *)
我认为这不正确。有人可以为我澄清一下吗?
没有。我认为你误解了正在发生的事情。 ::
在类型级别就像 ::
在值级别。考虑:
three :: Int
three = 3 :: (Int :: *)
这就是 3 :: Int
这就是 3
。在 Haskell + kind 签名中,您已经能够编写:(((Int :: *) :: *) :: *)
与 Int
相同。或者简单地说 Haskell 2010,(((3 :: Int) :: Int) :: Int)
。以前,您只能在 "right associated" 方式中走多远,因为种类本身没有种类。公理 * :: *
改变了这一点。
::
意味着它总是意味着什么。我不会将 ::
视为 "returns" 某物的运算符。它只是一段允许向类型检查器提供信息的语法,但在其他方面无关紧要。如果你真的,真的想把它看作某种运算符,它的行为会像const
,尽管很难写下它的"type"会是什么是。
这不是类型判断,而是类型归属。一般来说,表达式 foo :: bar
的值是 foo
,类型是 bar
(前提是类型检查器可以做出正确的判断)。作为直接结果,说 foo :: bar
具有类型 *
是完全错误的,除非 bar
(语义上)等于 *
。据我所知,在 Haskell 或 GHC 中不可能编写一个表达式来将类型判断反映到一个值中,但如果是的话,它的类型肯定也不会是 *
.
在 Richard Eisenberg 的 talk 中,他对从属 Haskell 的轻度多态性进行了研究,他清楚地表明这种判断/类型是合理的:
type Star = (* :: (* :: (* :: *)))
这是否意味着打字判断本身就有种*
?或者更灵活,因为 *
可能 具有 *
或 返回的类型...来自 (* :: *)
(我现在不确定)。
鉴于此假设,(* :: *) :: *
,这也意味着此类型也将是关联的:
type Star = (((* :: *) :: *) :: *)
我认为这不正确。有人可以为我澄清一下吗?
没有。我认为你误解了正在发生的事情。 ::
在类型级别就像 ::
在值级别。考虑:
three :: Int
three = 3 :: (Int :: *)
这就是 3 :: Int
这就是 3
。在 Haskell + kind 签名中,您已经能够编写:(((Int :: *) :: *) :: *)
与 Int
相同。或者简单地说 Haskell 2010,(((3 :: Int) :: Int) :: Int)
。以前,您只能在 "right associated" 方式中走多远,因为种类本身没有种类。公理 * :: *
改变了这一点。
::
意味着它总是意味着什么。我不会将 ::
视为 "returns" 某物的运算符。它只是一段允许向类型检查器提供信息的语法,但在其他方面无关紧要。如果你真的,真的想把它看作某种运算符,它的行为会像const
,尽管很难写下它的"type"会是什么是。
这不是类型判断,而是类型归属。一般来说,表达式 foo :: bar
的值是 foo
,类型是 bar
(前提是类型检查器可以做出正确的判断)。作为直接结果,说 foo :: bar
具有类型 *
是完全错误的,除非 bar
(语义上)等于 *
。据我所知,在 Haskell 或 GHC 中不可能编写一个表达式来将类型判断反映到一个值中,但如果是的话,它的类型肯定也不会是 *
.