
I am trying to improve the error reporting in my sendfile library, and I know I can find out the current file name and line number with something like this:
{-# LANGUAGE CPP #-} main = putStrLn (__FILE__ ++ ":" ++ show __LINE__)
This outputs: test.hs:2
Unfortunately, if your file is in a hierarchy of folders, this flat file name doesn't give much context. Is there a macro to find out the current module? IE if I had a module Foo.Bar.Car.MyModule, I would like to be able to output something like this on error: Foo.Bar.Car.MyModule:2
Sounds like a job for cabal or ghc, to define appropriate macros for package and module when compiling the source?
Any help is appreciated!
For actually making use of such information, see http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack http://hackage.haskell.org/trac/ghc/wiki/ExplicitCallStack/StackTraceExperie... and also the recent thread on how to improve the quality of "+RTS -xc" output via mapException (hmm, can't reach the archive at the moment, one subject was "Should exhaustiveness testing be on by default?", about May; http://www.haskell.org/mailman/listinfo/glasgow-haskell-users ). If you really mean "any help", you could also use Template Haskell:-) {-# LANGUAGE TemplateHaskell #-} module Oh.Hi where import Language.Haskell.TH main = print $( location >>= \(Loc f p m s e)-> stringE (f++":"++p++":"++m++":"++show s++":"++show e)) Claus