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

Michael Snoyman michael at snoyman.com
Mon Feb 25 10:16:23 CET 2013


On Mon, Feb 25, 2013 at 11:13 AM, Simon Hengel <sol at typeful.net> wrote:

> 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.
>
>
And FWIW, my vote *does* go towards dropping it. I put this proposal in the
same category as rewrite rules in general: it's certainly possible for a
bad implementation to wreak havoc, but it's the responsibility of the
person using the rewrite rules to ensure that doesn't happen.

Michael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130225/a331b7cb/attachment.htm>


More information about the Haskell-Cafe mailing list