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 _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell