findmax::(Num a, Ord a) => [a] > a
findmax [] = 1
findmax [a] = a
findmax lst = max (lst !! 0)
(findmax (drop 1 lst))

   
Find the maximum number in a list. The top line shows the signature
that is inferred by Haskell. The next three lines illustrate the pattern
matching of the input that leads to execution of the appropriate
statement. A 1 is returned for an empty list. The element of a single
element list is returned. Otherwise, the greater of the leading element of
lst and the maximum of the rest of lst is returned.

findmax::(Num a, Ord a) => [a] > a
findmax [] = 1
findmax lst = last y
where
y = head lst : [ max a b
 a < (drop 1 lst)
 b < y ]

   
Find the maximum in a list using a list comprehension. As tokens
are added to y, the last one is always the maximum seen so far.
After lst is scanned, just its last element is the value of
findmax. 