hd :: [a] -> a hd [] = error "empty list" hd (x : _) = x main :: IO () main = do print (Main.reverse ([1,2,3]::[Int])) print (hd []::[String]) reverse :: [a] -> [a] reverse = reverseAcc [] where reverseAcc = foldl (flip (:))