[Haskell-beginners] confusing type signature with sections
Patrick Redmond
plredmond
Thu Oct 3 14:57:25 UTC 2013
Thank you both!
> The key is that typeclasses are open. You could write a Fractional instance
> for (a -> a), in which case it would be possible to do _something_ with this
> code. Would it be useful? Even Haskell can't guarantee that.
Yes, this is important! Thanks.
> Now, because we are writing ((+ 1) / 2) and we know that (/) takes two
> arguments that must be of the same type, we know that the type (Num a')
> => a' -> a' and the type (Num a'') => a'' have to be the same type, so
> it must be that a' = a -> a, so now we have:
>
> (+ 1) :: (Num a, Num (a -> a)) => a -> a
> 2 :: (Num a, Num (a -> a)) => a -> a
I'm still a little confused here. How can passing "2" into "(+ 1) /"
cause its type to be mangled? "2" has a type "(Num a) => a". How can
the presence of "(+ 1)" force the type of "2" to suddenly accept an
argument? How come it doesn't happen the other way around? (Meaning
"2" forces the type of "(+ 1)" to become simply "(Num a) => a".)
Prelude> :t 2 / (+ 1)
2 / (+ 1) :: (Fractional (a -> a), Num a) => a -> a
Thank you,
Patrick
More information about the Beginners
mailing list