我是一名二年级本科生,刚刚开始学习Haskell。我的问题是关于类型处理与模式匹配。我已经定义了一种包含不同参数和规格的汽车,如果汽车的变速箱是一个摇杆或自动变速箱,如下所示:
data Car = Stick [Char] Integer | Automatic [Char] Integer
到目前为止,这个解决方案对于模式匹配汽车非常出色,但现在我需要一个以汽车为输入并返回Stick / Automatic信息的功能,并且不想更改Stick / Automatic处理字符串处理。我不知道为该函数指定什么返回类型。那种返回类型会是什么?
答案 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