hd :: [a] -> a hd [] = error "empty list" hd (x : _) = x main :: IO () main = print (hd []::[String]) reverse :: [a] -> [a] reverse l = rev l [] where rev [] a = a rev (x:xs) a = rev xs (x:a)