Robert Stroud wrote:
However, I still think there's a bit of an inconsistency here. I understand that if k had the type "Num a => a", then the expression "show k" would be ambiguous, but unless I write that expression, there's no ambiguity...
Actually, you can give k that type, and thanks to defaulting you can then still use show k.
So it seems to me that the type checker is being a bit too eager to prevent something that hasn't happened yet.
Here it is the monomorphism restriction (Haskell report section 4.5.5) that enforces defaulting.
In contrast, in the case where I write "let k = 2 ...", the type checker seems happy to resolve the polymorphic type within the context of the let expression, and does what I expect.
I hope my last mail explained this: defaulting for monomorphic types happens quite late.
So is the problem that the context is effectively unbounded when I load the definition from a file, and hence the type checker has to be very conservative about preventing the ambiguity?
A file is (essentially) a module. This defaulting happens "when type inference for an entire module is complete" (rule 2 of the above mentioned section), because we don't want types to depend on arbitrary other modules - think of seperate compilation.
I'm afraid I'm also still not clear about why 2 doesn't default to 2::Integer in the same way that k defaults to k::Integer,
It does, that's why show 2 works. Hope that helps Christian Sievers