Let's say I have a function ($10).
Now, since 10 is of type Num a => a, ($10) is surely of type Num a => (a -> b) -> b, and GHCi confirms this.
But when I say let f = ($10), GHC infers f's type to be (Integer -> b) -> b, as if the let-assignment deduced some 'extra' information from the use of the literal.
Does this mean GHC's type inference coerces a concrete type for literals?
But if so, why does :t ($10) return Num a => (a -> b) -> b ?
f :: Num a => (a -> b) -> b
f = ($10)
typechecks, and f (+0.1) yields a correct result, while
g = ($10)
called with g (+0.1) fails, expecting an Integer.