制作类型多态

时间:2015-10-19 14:50:32

标签: haskell functional-programming

所以我定义了一个基本列表的类型,我可以解决如何使其变为多态的问题。 到目前为止我已经

module ListTup where
type ListTup = [(Char, String)]

我想知道是否有可能使Char部分成为e.i String,int。 可能吗? 我尝试使用Maybe Type但是我的方式会产生大量错误

2 个答案:

答案 0 :(得分:8)

您可以在定义类型同义词时包含类型变量,如下所示:

type ListTup a = [(a, String)]

答案 1 :(得分:0)

这取决于你想做什么。如果你想要不同的列表,每个列表在元组的第一个元素中具有相同的类型,你可以参数化类型构造函数,就像上面提到的C.Quilley一样。

如果您希望每个列表都能有不同的类型,您可以用代数类型(有区别的联合)包装所有必需的类型:

data MyKey = MyCharKey Char | MyStringKey String | MyIntKey Int
type ListTup = [(MyKey, String)]

你不能拥有"无论什么",因为类型需要在编译时可判定。