count :: A -> [A] -> Int
-- testing 13 combinations of argument values
-- pruning with 1/2 rules
-- looking through 0 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 0 candidates of size 4
-- looking through 1 candidates of size 5
count x xs = length (filter (x ==) xs)
count :: A -> [A] -> Int
-- testing 13 combinations of argument values
-- pruning with 8/13 rules
-- looking through 2 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 1 candidates of size 3
-- looking through 0 candidates of size 4
-- looking through 3 candidates of size 5
-- looking through 2 candidates of size 6
-- looking through 13 candidates of size 7
-- looking through 16 candidates of size 8
-- looking through 57 candidates of size 9
-- looking through 90 candidates of size 10
-- looking through 258 candidates of size 11
-- looking through 448 candidates of size 12
-- looking through 1145 candidates of size 13
-- looking through 2144 candidates of size 14
-- looking through 5216 candidates of size 15
-- looking through 10320 candidates of size 16
count x xs = if null xs then 0 else (if head xs == x then 1 else 0) + count x (tail xs)