module DDC.Base.Lexer
( SourcePos (..)
, Token (..)
, takeParsecSourcePos)
where
import DDC.Base.Pretty
import qualified Text.Parsec.Pos as P
data SourcePos
= SourcePos
{ sourcePosFile :: Maybe FilePath
, sourcePosLine :: Int
, sourcePosColumn :: Int }
deriving (Eq, Show)
instance Pretty SourcePos where
ppr (SourcePos (Just f) l c)
= ppr $ f ++ ":" ++ show l ++ ":" ++ show c
ppr (SourcePos Nothing l c)
= ppr $ "<interactive>:" ++ show l ++ ":" ++ show c
data Token t
= Token
{ tokenTok :: t
, tokenSourcePos :: SourcePos }
deriving (Eq, Show)
takeParsecSourcePos :: Token k -> P.SourcePos
takeParsecSourcePos (Token _ sp)
= case sp of
SourcePos Nothing l c -> P.newPos "<interactive>" l c
SourcePos (Just f) l c -> P.newPos f l c