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

Reply via email to