gpt4 book ai didi

haskell - Either 类型构造函数是否包含左/右大小写的幻像类型?

转载 作者:行者123 更新时间:2023-12-01 08:23:09 25 4
gpt4 key购买 nike

AFAIK,在 Haskell 中只有类型被值所占据,而不是类型构造函数。 Either 是类型 * -> * -> * 的二进制类型构造函数。 LeftRight 都将此类型构造函数应用于单个类型,该类型由传递的值提供。这是否意味着在这两种情况下 Either 只是部分应用,因此仍然是等待缺少的类型参数的类型构造函数?

let x = Right 'x' -- Either a Char

x 的类型为 Either a Char。我假设这种类型的类型是 * -> *。这显然是一种多态类型,而不是地面类型。然而 Either a Char 可以被 'x' 之类的值占据。

我怀疑类型变量 aRight 案例的幻像类型。 b 代表 Left。我知道与 Const 相关的幻像类型,其中根本不使用相应的类型变量。我走对了吗?

最佳答案

AFAIK, only types are inhabited by values in Haskell, not type constructors.

准点。

Left and Right both apply this type constructor to a single type

你不能这么说。 LeftRight 根本不存在于类型语言中,因此它们不会将任何东西应用于任何类型,它们只会将自己应用于

x has the type Either a Char. I would assume that this type would have the kind * -> *

您需要区分函数/构造函数参数类型变量。基本上就是free and bound variables之间的区别. Either a Char 仍然有种类 *,而不是 * -> *,因为它已经应用于 a。是的,这是一个类型变量,但它仍然是一个已经应用的参数。

Yet Either a Char can be inhabited by values like 'x'.

不完全——它可以被 Right 'x' 之类的值占据。

My suspicion is that the type variable a is a phantom type for the Right case resp. b for Left

有点,但我不会称其为“幻像”,因为您不能只计算 LeftRight。至少不会,除非您选择 Either Void b,但在这种情况下,您没有 a 变量。

关于haskell - Either 类型构造函数是否包含左/右大小写的幻像类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47283106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com