second :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 0/0 rules
-- looking through 0 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 1 candidates of size 3
-- tested 2 candidates
second xs  =  head (tail xs)

third :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 0/0 rules
-- looking through 0 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 1 candidates of size 3
-- looking through 1 candidates of size 4
-- tested 3 candidates
third xs  =  head (tail (tail xs))

sum :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 14/25 rules
-- looking through 2 candidates of size 1
-- looking through 4 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 6 candidates of size 4
-- looking through 6 candidates of size 5
-- tested 13 candidates
sum []  =  0
sum (x:xs)  =  x + sum xs

product :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 14/25 rules
-- looking through 2 candidates of size 1
-- looking through 4 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 6 candidates of size 4
-- looking through 6 candidates of size 5
-- tested 18 candidates
product []  =  1
product (x:xs)  =  x * product xs

sum :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 15/26 rules
-- looking through 2 candidates of size 1
-- looking through 4 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 9 candidates of size 4
-- tested 7 candidates
sum xs  =  foldr (+) 0 xs

product :: [Int] -> Int
-- testing 360 combinations of argument values
-- pruning with 15/26 rules
-- looking through 2 candidates of size 1
-- looking through 4 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 9 candidates of size 4
-- tested 9 candidates
product xs  =  foldr (*) 1 xs

