replacing the Prelude (again)

Simon Peyton-Jones
Tue, 16 Jul 2002 08:51:00 +0100

|    Ambiguities in the class Num are most common, so Haskell=20
| provides another=20
|    way to resolve them---with a default declaration:
|    default (t1 , ... , tn)
|    where n>=3D0, and each ti must be a monotype for which Num ti =
|                                                   ^^^^^^^^^^
|    In situations where an ambiguous type is discovered, an=20
| ambiguous type=20
|    variable is defaultable if at least one of its classes is=20
| a numeric class=20
|    (that is, Num or a subclass of Num) and if all of its=20
| classes are defined=20
|     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|    in the Prelude or a standard library=20
|           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|    Each defaultable variable is replaced by the first type in=20
| the default list=20
|    that is an instance of all the ambiguous variable's=20
| classes. It is a=20
|    static error if no such type is found."
| Do these become "whatever Num is in scope" when I use=20
| -fno-implicit-prelude, and "whatever classes from standard=20
| libraries" are in scope? If they don't then I think I'm in a pickle.

I confess that I had forgotten about this.  It's not easy to=20
see what a good alternative design would be... I suppose it=20
could be "whatever Num is in scope or a subclass thereof", but
what would correspond to "defined in the Prelude or a standard lib"?

An alternative would be to drop the rule altogether with
and let all ambiguous types be defaulted with the specified list of
types.  The motivation for the rules as stated is to avoid excessive=20
defaulting, which silently affects the meaning of your program.

As you say, the absence of an obvious design point means I'm=20
unlikely to fiddle just now.  If a consensus emerges (and it's not
to hard to do) I'd be willing to fiddle, though.