On the other hand, when the type context is not sufficient, it gets a bit bulky:
-- with sufficient type context:
xs <- map read <$> lines <$> getContents
-- an ugly inline type signature:
xs <- map (read :: String -> Int) <$> lines <$> getContents
For many such calls it's good to monomorphize: readInt :: String -> Int
readInt = read
but it still does not feel elegant (what about other return types?).Edit: obviously, this must have been `xs <-`, not `let xs =`.