Do you mean that the proposal itself won't work, or specifically implementing 
this features in terms of existing rewrite rules won't work?

I meant the latter.

I'll admit to ignorance on the internals of GHC, but it seems like doing the 
shallow source location approach would be far simpler than a full trace. I'd 
hate to lose a very valuable feature because we can't implement the perfect 
feature.

I agree with that sentiment. But in fact I suspect that getting a stack is 
little or no harder than the shallow thing.

My "implicit parameter" suggestion was trying to re-use an existing feature, 
with a small twist, to do what you want, rather than to implement something 
brand new.

Simon

From: michael.snoy...@gmail.com [mailto:michael.snoy...@gmail.com] On Behalf Of 
Michael Snoyman
Sent: 25 February 2013 18:19
To: Simon Peyton-Jones
Cc: Alexander Kjeldaas; Simon Hengel; Haskell Cafe
Subject: Re: [Haskell-cafe] RFC: rewrite-with-location proposal



On Mon, Feb 25, 2013 at 4:42 PM, Simon Peyton-Jones 
<simo...@microsoft.com<mailto:simo...@microsoft.com>> wrote:
I'm afraid the rewrite-rule idea won't work.  RULES are applied during 
optimisation, when tons of inlining has happened and the program has been 
shaken around a lot. No reliable source location information is available there.


Do you mean that the proposal itself won't work, or specifically implementing 
this features in terms of existing rewrite rules won't work?

See http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack; and please edit 
it.


One thing I'd disagree with on that page is point (3). While it's certainly 
nice to have a full stack trace, implementing just shallow call information is 
incredibly useful. For logging and test framework usages, it in fact completely 
covers the use case. And even for debugging, I think it would be a massive step 
in the right direction.

I'll admit to ignorance on the internals of GHC, but it seems like doing the 
shallow source location approach would be far simpler than a full trace. I'd 
hate to lose a very valuable feature because we can't implement the perfect 
feature.

One idea I had, which that page does not yet describe, is to have an implicit 
parameter,
something like ?loc::Location, with
          errLoc :: ?loc:Location => String -> a
          errLoc s = error ("At " ++ ?loc ++ "\n" ++ s)

This behave exactly like an ordinary implicit parameter, EXCEPT that if there 
is no binding for ?loc::Location, then the current location is used.  Thus

myErr :: ?loc:Location => Int -> a
myErr n = errLoc (show n)

foo :: Int -> int
foo n | n<0 = myErr n
        | otherwise = ...whatever...

When typechecking 'foo' we need ?loc:Location, and so the magic is that we use 
the location of the call of myErr in foo.

Simon



From: haskell-cafe-boun...@haskell.org<mailto:haskell-cafe-boun...@haskell.org> 
[mailto:haskell-cafe-boun...@haskell.org<mailto:haskell-cafe-boun...@haskell.org>]
 On Behalf Of Alexander Kjeldaas
Sent: 25 February 2013 12:16
To: Simon Hengel
Cc: Haskell Cafe
Subject: Re: [Haskell-cafe] RFC: rewrite-with-location proposal

On Mon, Feb 25, 2013 at 12:46 PM, Simon Hengel 
<s...@typeful.net<mailto:s...@typeful.net>> wrote:
On Mon, Feb 25, 2013 at 10:40:29AM +0100, Twan van Laarhoven wrote:
> I think there is no need to have a separate REWRITE_WITH_LOCATION
> rule. What if the compiler instead rewrites 'currentLocation' to the
> current location? Then you'd just define the rule:
>
> {-# REWRITE "errorLoc" error = errorLoc currentLocation #-}
REWRITE rules are only enabled with -O.  Source locations are also
useful during development (when you care more about compilation time
than efficient code and hence use -O0).  So I'm not sure whether it's a
good idea to lump those two things together.

I could imagine that source locations being useful when debugging rewrite rules 
for example.

I think your argument makes sense, but why not fix that specifically?

{-# REWRITE ALWAYS "errorLoc" error = errorLoc currentLocation #-}

Alexander


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org<mailto:Haskell-Cafe@haskell.org>
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to