To process lists, we can simply pattern match on the constructors of the list type:
listSum :: [Int] -> Int
listSum [] = 0
listSum (x:xs) = x + listSum xs
We can match more values by specifying a more elaborate pattern:
sumTwoPer :: [Int] -> Int
sumTwoPer [] = 0
sumTwoPer (x1:x2:xs) = x1 + x2 + sumTwoPer xs
sumTwoPer (x:xs) = x + sumTwoPer xs
Note that in the above example, we had to provide a more exhaustive pattern match to handle cases where an odd length list is given as an argument.
The Haskell Prelude defines many built-ins for handling lists, like map
, filter
, etc.. Where possible, you should use these instead of writing your own recursive functions.