
Which version of GHC are you using? If you are using 7.10.3, you can use implicit parameters to get the caller of head (this should be enough to narrow down the problem to one module and then add more debugging information there). Or you could compile a profiling version of your executable and use +RTS -xc (I think), which should print a stack trace on any thrown exception (also for exceptions which are later caught). Then the last trace should be for head. To use implicit parameters, you need: {-# LANGUAGE ImplicitParams #-} import GHC.Stack (CallStack, showCallStack) head' :: (?callStack :: CallStack) => [a] -> a head' (x:_) = x head' [] = error $ "head': empty list" ++ "\nCallStack: " ++ showCallStack ?callStack Then replace every use of head by head'. If you need more than one stack frame, just add (?callStack :: CallStack) to the constraints of the calling function and GHC should add another stack frame. On 03/11/2016 04:56 PM, Han Joosten wrote:
In a rather large program I made some changes, and now I get the runtime error:
ampersand.exe: Prelude.head: empty list
Of course I know that head is partial, and should be used with care. It is used many times (we have 100+ modules in the program). Is there an elegant way to get some information about where the specific call to head is being made?
Thanks!
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe