logo       

Re[4]: the impossible happened: msg#00111

lang.haskell.glasgow.bugs

Subject: Re[4]: the impossible happened

Hello Simon,

Monday, May 23, 2005, 6:46:14 PM, you wrote:

SPJ> | head (x:xs) = x
SPJ> | head [] = superError "head []"
SPJ> |
SPJ> | which will print: "Error: head [] in Module.hs:155"

SPJ> A difficulty is that the caller of 'head' might itself be called from
SPJ> somewhere else:

you are right. i forget that it needs run-time support

SPJ> It's all very like cost-centre stacks, which is why GHC provides the -xc
SPJ> option when you are profiling. I think that give you what you want ---
SPJ> but you have to compile your program profiled.

i never used -prof, so i can't comment this. btw, -prof is not
compatible with -threaded, at least in my distribution (i guess that
it may be just lack of appropriately compiled libraries)

SPJ> Another take on this is that you want an implicit parameter

SPJ> head :: (%loc :: Location) => [a] -> a

SPJ> so that 'head' can report %loc when it fails. Now you'd need to give
SPJ> rules to say where %loc is bound. It'd be a pretty magic kind of
SPJ> implicit parameter. Or should it be a stack of locations?

of course, stack! it's look very beatiful. calling stack in lazy language -
that will be amazing! :-) i foresee that this implicit parameter, if it
will be added to GHC, may also be used for other debugging purposes

but it's not obvious which calls we must keep in this stack.
to be exact, it's possible to save tail-recursed calls while omitting
indirect-recursive calls (which also will be tail-recursive)?


--
Best regards,
Bulat mailto:bulatz@xxxxxxxxxx


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise