replacing the Prelude (again)

Dylan Thurston dpt@math.harvard.edu
Sat, 13 Jul 2002 18:02:37 -0400


--FL5UXtIhxfXey3p5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sat, Jul 13, 2002 at 07:58:19PM +1000, Bernard James POPE wrote:
> ...
> I'm fond of the idea proposed by Marcin 'Qrczak' Kowalczyk:
>=20
>    May I propose an alternative way of specifying an alternative Prelude?
>    Instead of having a command line switch, let's say that 3 always means
>    Prelude.fromInteger 3 - for any *module Prelude* which is in scope!
>=20
>    That is, one could say:
>        import Prelude ()
>        import MyPrelude as Prelude
>    IMHO it's very intuitive, contrary to -fno-implicit-prelude flag.

I don't agree with this, since the Haskell 98 standard explicitly
contradicts it.  I don't see what's wrong with a command line switch
that would do this, anyway.

> Presuming of course that defaulting would follow this path and refer
> to the new Prelude.

I never came up with a design that would allow this.  Defaulting seems
to be the one piece of the Haskell standard for which there is not yet
a general solution.

Although now that I think about it, if you could just specify which
fromInteger you wanted (i.e., give that fromInteger a more specific
type) the problem would go away.  Perhaps that's really the better
solution anyway: how often do people want to default to something
that's not the first on the defaulting list?  I think that might end
up being less surprising to programmers, anyway.  It might work as a
temporary hack for you, anyway.

(That is, add declarations like

fromInteger :: Integer -> Int
fromRational :: Rational -> Double

in your new Prelude.  This would work as long as users don't otherwise
use fromInteger.)

I don't know how you want to transform the types, but there are at
least two areas where there are still special types: List and Bool.
For List, I don't actually see any problem in principle with allowing
other implementations of list comprehensions and whatnot, but Simon
Peyton-Jones indicated that it would be difficult to actually
implement; with Bool, one would need to define additional functions
(like ifThenElse).

Best,
     Dylan

--FL5UXtIhxfXey3p5
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE9MKN8Veybfhaa3tcRApfDAJ9lb/6wLkhwytsvCMLLyL5Dm/JPgACdG52o
qH80hPrvkP98xFYn5kjaxZw=
=udqB
-----END PGP SIGNATURE-----

--FL5UXtIhxfXey3p5--