我是一名二年级本科生,刚刚开始学习Haskell。我的问题是关于类型处理还是模式匹配。我定义了一个Car类型,如果汽车的变速箱是摇杆还是自动变速箱,则包含不同的参数和规格,例如:
data Car = Stick [Char] Integer | Automatic [Char] Integer
到目前为止,该解决方案在模式匹配汽车方面一直表现出色,但是现在我需要一个函数,该函数将汽车作为输入并返回Stick / Automatic信息,而不必将Stick / Automatic处理更改为string-处理。我不知道为该函数指定哪种返回类型。该返回类型是什么?
您可以为传输类型引入一种新类型:
data TransmissionType = Stick | Automatic
并将car的定义更改为:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句