module ErrorLocation (err, undef, debug, trc) where
import Language.Haskell.TH.Syntax
import Debug.Trace
err :: String -> Q Exp
err str = do
loc <- qLocation
let prefix = (locationToString loc) ++ " "
[|error (prefix ++ str)|]
undef :: Q Exp
undef = do
loc <- qLocation
let prefix = (locationToString loc) ++ " "
[|trace (prefix ++ "undefined") undefined|]
locationToString :: Loc -> String
locationToString loc = (loc_package loc) ++ ":" ++ (loc_module loc) ++ " " ++
(loc_filename loc) ++ ":" ++ (line loc) ++ ":" ++ (char loc)
where
line = show . fst . loc_start
char = show . snd . loc_start
debug :: Show a => a -> a
debug x = trace ("DEBUG: " ++ show x) x
trc :: String -> Q Exp
trc str = do
loc <- qLocation
let prefix = "TRACE: " ++ (locationToString loc) ++ " "
[|trace (prefix ++ str)|]