在类型和数据构造函数中键入参数

时间:2017-07-07 04:42:29

标签: haskell

如果我理解正确,

data Int = 1 | 2 | 3 | 4 | ...

右边的所有东西都只是价值观。

以下,

data Maybe b = Nothing
             | Just b

b中的Maybe bb中的Just b是否意味着同样的事情?对我而言,b中的Maybe b似乎是类型变量b中的Just b值变量b型

1 个答案:

答案 0 :(得分:0)

data Maybe b表示该类型是通用的,b是泛型类型变量。

Just b确实表明,您可以通过提供Maybe b类型的值来创建b值的方法之一。

Prelude> Just "foo"
Just "foo"
Prelude> Just 42
Just 42

此处,Just "Foo"的类型为Maybe String,因此类型类型变量bString。在Haskell中,类型也是变量。

但是,如果你检查Just 42的类型,你会发现它仍然是抽象的:

Prelude> :t Just 42
Just 42 :: Num a => Maybe a

这意味着只要Maybe aa类型类的实例,它就可以是任何Num。所以在这种情况下,类型仍然是“可变的”。

(第一个例子data Int,不编译......)