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)