Playing around in ghci
I got the following expression: unlines . map (\(a,b) -> show a ++ " " ++ show b)
Now when I check it via :t
I get:
> :t unlines . map (\(a,b) -> show a ++ " " ++ show b)
unlines . map (\(a,b) -> show a ++ " " ++ show b)
:: (Show a, Show a1) => [(a, a1)] -> String
So exactly as expected. But now if I try to assign it to some name, I get a more specific signature than the original one:
> let f = unlines . map (\(a,b) -> show a ++ " " ++ show b)
> :t f
f :: [((), ())] -> String
Why does this happen?