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

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to