[Haskell-cafe] RFC: rewrite-with-location proposal

Simon Hengel sol at typeful.net
Mon Feb 25 10:13:08 CET 2013


On Mon, Feb 25, 2013 at 09:57:04AM +0100, Joachim Breitner wrote:
> Hi,
> 
> Am Montag, den 25.02.2013, 08:06 +0200 schrieb Michael Snoyman:
> > Quite a while back, Simon Hengel and I put together a proposal[1] for
> > a new feature in GHC. The basic idea is pretty simple: provide a new
> > pragma that could be used like so:
> > 
> > error :: String -> a
> > errorLoc :: IO Location -> String -> a
> > {-# REWRITE_WITH_LOCATION error errorLoc #-}
> 
> in light of attempts to split base into a pure part (without IO) and
> another part, I wonder if the IO wrapping is really necessary.
> 
> Can you elaborate the reason why a simple "Location ->" is not enough?

The IO helps with reasoning.  Without it you could write code that does
something different depending on the call site.  Here is an example:


    someBogusThingy :: Int
    someBogusThingy = ..

    someBogusThingyLoc :: Location -> Int
    someBogusThingyLoc loc
      | (even . getLine) loc = 23
      | otherwise            = someBogusThingyLoc

    {-# REWRITE_WITH_LOCATION someBogusThingy someBogusThingyLoc #-}

Now someBogusThingy behaves different depending on whether the call site
is on an even or uneven line number.  Admittedly, the example is
contrived, but I hope it illustrates the issue.

I do not insist on keeping it.  If we, as a community, decide, that we
do not need the IO here.  Then I'm fine with dropping it.

Cheers,
Simon



More information about the Haskell-Cafe mailing list