差不多吧:
prop_leftInverse ((x, y):rest) = undefined
首先, ,你需要在整个模式中使用括号。其次,列表中的第一个元素是一个元组,但列表的其余部分只是元组列表,而不是元组列表。
如果你看一下简单的模式匹配的通用列表
head :: [a] -> a
head [] = error "Empty list"
head (x:xs) = x
对这个工程的所有类型a
类型的所有值,或。如果你想要一个特定的类型,如Int
,你可以做
headIsOne :: [Int] -> Bool
headIsOne (1:xs) = True
headIsOne _ = False -- Here the _ matches anything
所以,如果你想匹配一个元组:
addTup :: (Int, Int) -> Int
addTup (x, y) = x + y
我们看到的是模式匹配元组是究竟如何我们在代码中编写一个代码,所以要在列表的开头匹配一个,我们只需要将第一个元素与特定模式匹配即可。
prop_leftInverse ((x, y):rest) = undefined
列表的其余部分被分配到rest
(尽管你可以称它为任何你想要的)。
又如
如果你想抢得头两个元:
myFunc ((x, y):(v, u):rest) = undefined
涨幅前三:
myFunc ((x1, y1):(x2, y2):(x3, y3):rest) = undefined
现在我希望你能看到的模式(得到它?)
这非常详细,谢谢! –