On 20 Sep 2006, at 22:21, Ashley Yakeley wrote:
Arie Peterson wrote:
You absolutely right about this defaulting breaking referential transparency.
Do you know if it can be switched off in GHC? I know one can switch on warnings when it happens, but I don't think that's the same thing.
You can use an empty default declaration to switch off default types for a particular module, but I don't think you can do this for all modules, or at least not in standard Haskell - section 4.3.4 of the language manual says:
"Only one default declaration is permitted per module, and its effect is limited to that module. If no default declaration is given in a module then it assumed to be:
default (Integer, Double)
The empty default declaration, default (), turns off all defaults in a module."
Switching off default types may introduce error messages about top-level declarations with unbound type variables - for example
Ambiguous type variable `t' in the constraint:
`Num t' arising from the literal `2' at /tmp/test.hs:3:4
Possible cause: the monomorphism restriction applied to the following:
k :: t (bound at /tmp/test.hs:3:0)
Probable fix: give these definition(s) an explicit type signature
or use -fno-monomorphism-restriction
Turning off the monomorphism restriction makes the errors go away, but adding an explicit polymorphic type signature is probably better.
Robert