module Argon.Loc (Loc, srcSpanToLoc, locToString, tagMsg)
where
import Text.Printf (printf)
import Control.Arrow ((&&&))
import qualified SrcLoc as GHC
import qualified FastString as GHC
type Loc = (Int, Int)
srcSpanToLoc :: GHC.SrcSpan -> Loc
srcSpanToLoc ss = lloc $ GHC.srcSpanStart ss
where lloc = (GHC.srcLocLine &&& GHC.srcLocCol) . toRealSrcLoc
toRealSrcLoc (GHC.RealSrcLoc z) = z
toRealSrcLoc _ = GHC.mkRealSrcLoc (GHC.mkFastString "no info") 0 0
locToString :: Loc -> String
locToString = uncurry $ printf "%d:%d"
tagMsg :: Loc -> String -> String
tagMsg s msg = locToString s ++ " " ++ msg