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