Haskell:类型与模式匹配

URL_Flip

我是一名二年级本科生,刚刚开始学习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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell中类型匹配的模式

来自分类Dev

Haskell中类型匹配的模式

来自分类Dev

Haskell-模式匹配“无法匹配预期类型”

来自分类Dev

Haskell函数中针对类型类实例的模式匹配

来自分类Dev

Haskell:模式匹配类型注释中需要ScopedTypeVariables

来自分类Dev

如何在Haskell中触发类型族模式匹配错误?

来自分类Dev

Haskell:模式与我自己的类型匹配错误

来自分类Dev

模式匹配Haskell列表

来自分类Dev

Haskell模式匹配警告

来自分类Dev

Haskell记录模式匹配

来自分类Dev

模式匹配是多余的,haskell

来自分类Dev

模式不匹配:Haskell

来自分类Dev

Haskell模式匹配警告

来自分类Dev

类型的模式匹配

来自分类Dev

Haskell无法匹配类型

来自分类Dev

Haskell,类型匹配问题

来自分类Dev

Haskell无法匹配类型

来自分类Dev

Haskell:无法匹配类型?

来自分类Dev

向量上的Haskell模式匹配

来自分类Dev

Haskell模式匹配元组列表

来自分类Dev

Haskell函数中的模式匹配

来自分类Dev

模式匹配Haskell高阶函数?

来自分类Dev

Haskell警告:模式匹配是多余的

来自分类Dev

Haskell中的模式匹配操作

来自分类Dev

函数参数的Haskell模式匹配

来自分类Dev

Scala与Haskell中List [T]和Set [T]上的模式匹配:类型擦除的影响

来自分类Dev

Haskell是否可以在类型类上进行模式匹配来实现多个调度?

来自分类Dev

您可以在Haskell的类型级别上进行模式匹配吗?

来自分类Dev

Haskell:模式匹配绑定运算符时,刚性类型变量错误