all2 :: (a -> b -> Bool) -> [a] -> [b] -> Bool
-- True if the lists are the same length, and
-- all corresponding elements satisfy the predicate
all2 _ []     []     = True
all2 :: (a -> b -> Bool) -> [a] -> [b] -> Bool
all2 _ []     []     = True
all2 _ []     []     = True