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?