module Presyntax.Tokens where import qualified Data.Text as T import Data.Text (Text) data TokenClass = TokVar Text | TokEof | TokLambda | TokArrow | TokOParen | TokOBrace | TokOSquare | TokCParen | TokCBrace | TokCSquare -- {-# #-} | TokOPragma | TokCPragma | TokPrim | TokReplLet | TokReplT Text | TokStar | TokColon | TokEqual | TokComma | TokPi1 | TokPi2 | TokLet | TokIn | TokLStart | TokLEnd | TokAnd | TokOr | TokAs | TokWhere | TokCase | TokPostulate | TokData | TokSemi deriving (Eq, Show, Ord) tokSize :: TokenClass -> Int tokSize (TokVar x) = T.length x tokSize TokEof = 0 tokSize TokLambda = 1 tokSize TokOParen = 1 tokSize TokOBrace = 1 tokSize TokOSquare = 1 tokSize TokCBrace = 1 tokSize TokCParen = 1 tokSize TokCSquare = 1 tokSize TokCPragma = 3 tokSize TokOPragma = 3 tokSize TokPrim = length "PRIMITIVE" tokSize TokStar = 1 tokSize TokColon = 1 tokSize TokEqual = 1 tokSize TokComma = 1 tokSize TokSemi = 1 tokSize TokArrow = 2 tokSize TokPi1 = 2 tokSize TokPi2 = 2 tokSize TokReplLet = 4 tokSize TokAnd = 2 tokSize TokOr = 2 tokSize TokAs = 2 tokSize (TokReplT s) = T.length s tokSize TokLet = 3 tokSize TokIn = 2 tokSize TokLStart = 0 tokSize TokLEnd = 0 tokSize TokWhere = length "where" tokSize TokData = length "data" tokSize TokCase = length "case" tokSize TokPostulate = length "postulate" data Token = Token { tokenClass :: TokenClass , tokStartLine :: !Int , tokStartCol :: !Int } deriving (Eq, Show, Ord)