module DDC.Data.Token ( Token(..) , takeParsecSourcePos , tokenLine , tokenColumn) where import DDC.Data.SourcePos import qualified Text.Parsec.Pos as P -- | Wrapper for primitive token type that gives it a source position. data Token t = Token { tokenTok :: t , tokenSourcePos :: SourcePos } deriving (Eq, Show) -- | Take the parsec style source position from a token. takeParsecSourcePos :: Token k -> P.SourcePos takeParsecSourcePos (Token _ sp) = case sp of SourcePos source l c -> P.newPos source l c -- | Take the line number of a token. tokenLine :: Token t -> Int tokenLine (Token _ (SourcePos _ l _)) = l -- | Take the column number of a token. tokenColumn :: Token t -> Int tokenColumn (Token _ (SourcePos _ _ c)) = c