Haskell:类型与模式匹配

时间:2013-11-10 14:09:20

标签: haskell

我是一名二年级本科生,刚刚开始学习Haskell。我的问题是关于类型处理与模式匹配。我已经定义了一种包含不同参数和规格的汽车,如果汽车的变速箱是一个摇杆或自动变速箱,如下所示:

data Car = Stick [Char] Integer | Automatic [Char] Integer

到目前为止,这个解决方案对于模式匹配汽车非常出色,但现在我需要一个以汽车为输入并返回Stick / Automatic信息的功能,并且不想更改Stick / Automatic处理字符串处理。我不知道为该函数指定什么返回类型。那种返回类型会是什么?

2 个答案:

答案 0 :(得分:14)

您可以为传输类型引入新类型:

data TransmissionType = Stick | Automatic

并将您的汽车定义更改为:

data Car = Car TransmissionType [Char] Integer

然后您可以添加一个函数来获取类型

transmissionType :: Car -> TransmissionType
transmissionType (Car t _ _) = t

由于您只有一个构造函数,因此可以使用记录:

data Car = Car {
    transmissionType :: TransmissionType,
    field1 :: [Char],
    field2 :: Integer
}

如果您不想更改定义,可以添加功能

isManual :: Car -> Bool
isManual (Stick _ _) = True
isManual (Automatic _ _) = False

答案 1 :(得分:-6)

在Haskell中,您在代码中(在声明中)编写的返回类型不适用于编译器。这是给你的。编译器会计算出你的函数是什么类型,然后检查你是否正确。

我建议你做的是制作你需要的功能。 (我还没弄清楚应该是什么。)完成后,打开ghci(编译器,交互式),加载你的代码。然后使用:t让编译器弄清楚它是什么类型。如果你愿意,你可以在声明中写出来。没有必要。

$ ghci
prelude> :load yourfile
prelude> :t yourfunction