[Haskell-cafe] RFC: rewrite-with-location proposal
Twan van Laarhoven
twanvl at gmail.com
Mon Feb 25 14:02:11 CET 2013
On 25/02/13 13:41, Michael Snoyman wrote:
>
> At that point, we've now made two changes to REWRITE rules:
>
> 1. They can takes a new ALWAYS parameters.
> 2. There's a new, special identifier currentLocation available.
>
> What would be the advantage is of that approach versus introducing a single new
> REWRITE_WITH_LOCATION pragma?
You are probably right. Ghc already has some logic in place for doing this with
'assert':
-- Return an expression for (assertError "Foo.hs:27")
mkAssertErrorExpr = ..
finishHsVar name
= do { ignore_asserts <- goptM Opt_IgnoreAsserts
; if ignore_asserts || not (name `hasKey` assertIdKey)
then return (HsVar name, unitFV name)
else do { e <- mkAssertErrorExpr
; return (e, unitFV name) } }
So the check is name `hasKey` assertIdKey. I.e. it is a literal check whether
the name is assert. Maybe that could be extended to check whether the name is
declared as assert-like.
Of course the real solution is to have proper stack traces.
Twan
More information about the Haskell-Cafe
mailing list