less prototype, less bad code implementation of CCHM type theory
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.0 KiB

  1. module Presyntax.Tokens where
  2. import Data.Text (Text)
  3. import qualified Data.Text as T
  4. data TokenClass
  5. = TokVar Text
  6. | TokEof
  7. | TokLambda
  8. | TokArrow
  9. | TokOParen
  10. | TokOBrace
  11. | TokCParen
  12. | TokCBrace
  13. -- {-# #-}
  14. | TokOPragma
  15. | TokCPragma
  16. | TokPrim
  17. | TokReplLet
  18. | TokReplT Text
  19. | TokStar
  20. | TokColon
  21. | TokEqual
  22. | TokComma
  23. | TokPi1
  24. | TokPi2
  25. | TokSemi
  26. deriving (Eq, Show, Ord)
  27. tokSize :: TokenClass -> Int
  28. tokSize (TokVar x) = T.length x
  29. tokSize TokEof = 0
  30. tokSize TokLambda = 1
  31. tokSize TokOParen = 1
  32. tokSize TokOBrace = 1
  33. tokSize TokCBrace = 1
  34. tokSize TokCParen = 1
  35. tokSize TokCPragma = 3
  36. tokSize TokOPragma = 3
  37. tokSize TokPrim = length "PRIMITIVE"
  38. tokSize TokStar = 1
  39. tokSize TokColon = 1
  40. tokSize TokEqual = 1
  41. tokSize TokComma = 1
  42. tokSize TokSemi = 1
  43. tokSize TokArrow = 2
  44. tokSize TokPi1 = 2
  45. tokSize TokPi2 = 2
  46. tokSize TokReplLet = 4
  47. tokSize (TokReplT s) = T.length s
  48. data Token
  49. = Token { tokenClass :: TokenClass
  50. , tokStartLine :: !Int
  51. , tokStartCol :: !Int
  52. }
  53. deriving (Eq, Show, Ord)