列表上的模式匹配

我们可以在列表上匹配任何其他数据类型,尽管它们有点独特,因为构建列表的构造函数是中缀函数::。 (有关其工作原理的更多信息,请参阅创建列表示例。)

matchMyList : List SomeType -> SomeOtherType
matchMyList myList = 
    case myList of
        [] -> 
            emptyCase

        (theHead::theRest) ->
            doSomethingWith theHead theRest

我们可以根据需要匹配列表中的多个元素:

hasAtLeast2Elems : List a -> Bool
hasAtLeast2Elems myList =
    case myList of
        (e1 :: e2 :: rest) -> 
            True
    
        _ -> 
            False

hasAtLeast3Elems : List a -> Bool
hasAtLeast3Elems myList =
    case myList of
        (e1 :: e2 :: e3 :: rest) -> 
            True
    
        _ -> 
            False