The following function finds all local maxima.A local maxima is an element of a list such that it's greater than either of its neighbor elements. An element with 1 neighbor is not a local maximum.localMaxima :: [Integer] -> [Integer]localMaxima (x:y:z:zs) = if (y > x && y > z) then y : localMaxima (y:z:zs)                          else localMaxima (y:z:zs)localMaxima _          = []Please critique it.Examples:ghci> localMaxima [1,3,2,55,2] [3,55]ghci> localMaxima [1,3,2,55,1000000000][3]
Finding Local Maxima
haskell
You have redundant parentheses here: (y > x && y > z). You can also make your type more generic: localMaxima :: Ord a => [a] -> [a].I think it looks a bit cleaner using an as-pattern and guard clauses. This way you don't need zs and can just write _.localMaxima (x:rest@(y:z:_))  | y > x && y > z = y : localMaxima rest  | otherwise      = localMaxima restlocalMaxima _ = []In fact, if you know that y > z then you don't need to check if z is a local maximum.