我应该如何定义元组类型Quartet
,它将包含四个元素 - 两个Integral
和两个Boolean
,以及函数firstTwo
返回积分表和{ {1}}返回两个布尔人的表?
secondTwo
答案 0 :(得分:3)
正如您所定义的那样,Quartet
值构造函数接受一个参数,这是一个4元组。您也可以这样定义:
data Quartet = Quartet Int Int Bool Bool
它的工作方式几乎相同,只是模式匹配会略有不同。
您还可以为此特定类型的4元组创建类型同义词:
type Quartet = (Int, Int, Bool, Bool)
如果你选择这种最终方法,你的功能就会像你编写它们一样工作,因为在最后一种情况下的模式匹配只不过是与一个普通元组匹配。
但是,如果你使用前两种情况中的任何一种,关键的想法是在你的函数定义中,你必须模式匹配值构造函数,所以你需要包含Quartet
值构造函数作为模式:
--firstPair :: Quartet -> [Int, Int]
firstPair (Quartet (a, b, _, _)) = [a, b]
--secondPair :: Quartet -> [Bool, Bool]
secondPair (Quartet (_, _, a, b)) = [a, b]