replacing the Prelude (again)
Bernard James POPE
bjpop@cs.mu.OZ.AU
Thu, 18 Jul 2002 15:52:18 +1000 (EST)
Dylan writes:
> On Tue, Jul 16, 2002 at 04:02:44PM +1000, Bernard James POPE wrote:
> > I would like to use do-notation in the transformed program, but have it
> > refer to Prelude.Monad and not MyPrelude.Monad which is also in scope.
>
> Why do you have a MyPrelude.Monad (different from Prelude.Monad) if
> you don't want to use it?
Hi,
This is part of a debugger for haskell. The approach taken is to transform
the original program. Under transformation the types of functions change.
If the user's program calls >>=, then in the debugged program that is a
call to a transformed version of >>= (ie MyPrelude.Monad - don't worry it
isn't really called "MyPrelude"). Btw all do notation from the original
program is desugared during transformation.
It just turns out that the transformed code is neater if I can use
do notation in it. Which is quite helpful because it makes it easier to
check that the transformation is doing the right thing!
However, for this I have to use Prelude.Monad instead of MyPrelude.Monad,
because the latter is transformed and all the types are changed.
It really isn't a big deal. I can do without the do notation. I just have
to change the transformation. If there were more fine grained control about
how desugaring worked then that would help, but that would also add a lot
of extra complexity to the compiler and I doubt the benefits would outweigh
the costs.
Cheers,
Bernie.