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
filter, etc.. Where possible, you should use these instead of writing your own recursive functions.