module UHC.Light.Compiler.Scanner.Token ( module UU.Scanner.GenToken , reserved, valueToken, errToken, tokTpIsInt , Token, ValTokenVal , EnumValToken (..) , tokenVals, tokenVal, tokenMap , tokTpIsId , tokTpQual ) where import UU.Scanner.Position import UU.Scanner.GenToken import qualified Data.Set as Set {-# LINE 27 "src/ehc/Scanner/Token.chs" #-} -- | The value of a Token is a [String], of length > 1 only when it encodes qualified identifiers type ValTokenVal = [String] type Token = GenToken String EnumValToken ValTokenVal {-# LINE 33 "src/ehc/Scanner/Token.chs" #-} -- | The kind of tokens data EnumValToken = TkVarid | TkConid | TkOp | TkConOp | TkString | TkChar | TkInteger8 | TkInteger10 | TkInteger16 | TkFraction | TkTextnm | TkTextln | TkQVarid -- qualified variants | TkQConid | TkQOp | TkQConOp | TkError deriving (Eq, Ord) {-# LINE 64 "src/ehc/Scanner/Token.chs" #-} -- | Extract the parts of a qualified identifier tokenVals :: Token -> [String] tokenVals (ValToken _ v _) = v tokenVals (Reserved v _) = [v] -- | Extract the value as a flattened string tokenVal :: Token -> String tokenVal = concat . tokenVals tokenMap :: (String->String) -> Token -> Token tokenMap f (ValToken t v p) = ValToken t (map f v) p tokenMap f (Reserved k p) = Reserved (f k) p {-# LINE 79 "src/ehc/Scanner/Token.chs" #-} reserved :: String -> Pos -> Token reserved = Reserved valueToken :: EnumValToken -> String -> Pos -> Token valueToken t s p = ValToken t [s] p errToken :: String -> Pos -> Token errToken = valueToken TkError {-# LINE 90 "src/ehc/Scanner/Token.chs" #-} tokTpIsInt :: EnumValToken -> Bool tokTpIsInt tp = tp == TkInteger8 || tp == TkInteger10 || tp == TkInteger16 {-# LINE 95 "src/ehc/Scanner/Token.chs" #-} tokTpIsId :: EnumValToken -> Bool tokTpIsId = (`Set.member` ts) where ts = Set.fromList [TkVarid,TkConid,TkOp,TkConOp ,TkQVarid,TkQConid,TkQOp,TkQConOp ] {-# LINE 119 "src/ehc/Scanner/Token.chs" #-} -- | Qualified equivalents of token kinds representing unqualified tokens tokTpQual :: EnumValToken -> EnumValToken tokTpQual TkVarid = TkQVarid tokTpQual TkConid = TkQConid tokTpQual TkOp = TkQOp tokTpQual TkConOp = TkQConOp tokTpQual t = t