{-# LANGUAGE TemplateHaskell #-}
module Control.Monad.Loc.TH (withLocTH) where
import Prelude hiding (mod)
import Language.Haskell.TH.Syntax (qLocation, Loc(..), Q, Exp)
import Text.Printf
import Control.Monad.Loc
withLocTH :: Q Exp
withLocTH :: Q Exp
withLocTH = do
Loc
loc <- Q Loc
forall (m :: * -> *). Quasi m => m Loc
qLocation
let loc_msg :: String
loc_msg = Loc -> String
showLoc Loc
loc
[| withLoc loc_msg |]
showLoc :: Loc -> String
showLoc :: Loc -> String
showLoc Loc{loc_module :: Loc -> String
loc_module=String
mod, loc_filename :: Loc -> String
loc_filename=String
filename, loc_start :: Loc -> CharPos
loc_start=CharPos
start} =
String -> String -> String -> String -> String
forall r. PrintfType r => String -> r
printf String
"%s (%s). %s" String
mod String
filename (CharPos -> String
forall a. Show a => a -> String
show CharPos
start)