[Haskell-cafe] Prelude.head: empty list

Bryan Richter b at chreekat.net
Fri Mar 11 18:17:01 UTC 2016


On Fri, Mar 11, 2016 at 05:13:15PM +0100, Jonas Scholl wrote:
> 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.

I'd like to add a link to
https://hackage.haskell.org/package/located-base, which adds
callstacks to a lot of partial functions.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160311/fd08e442/attachment.sig>


More information about the Haskell-Cafe mailing list