AST.hs 832 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. module Gidl.Types.AST where
  2. import Data.Monoid
  3. type Identifier = String
  4. type TypeName = String
  5. data TypeEnv
  6. = TypeEnv [(TypeName, Type)]
  7. deriving (Eq, Show)
  8. instance Monoid TypeEnv where
  9. (TypeEnv a) `mappend` (TypeEnv b) = TypeEnv (a ++ b)
  10. mempty = TypeEnv []
  11. data Type
  12. = StructType Struct
  13. | NewtypeType Newtype
  14. | EnumType EnumT
  15. | AtomType Atom
  16. -- | MaybeType Type
  17. -- | EitherType Type Type
  18. deriving (Eq, Show)
  19. data Atom
  20. = AtomInt Bits
  21. | AtomWord Bits
  22. | AtomFloat
  23. | AtomDouble
  24. -- | AtomString Int
  25. deriving (Eq, Show)
  26. data Bits
  27. = Bits8
  28. | Bits16
  29. | Bits32
  30. | Bits64
  31. deriving (Eq, Show)
  32. data Struct
  33. = Struct [(Identifier, TypeName)]
  34. deriving (Eq, Show)
  35. data Newtype
  36. = Newtype TypeName
  37. deriving (Eq, Show)
  38. data EnumT
  39. = EnumT Bits [(Identifier, Integer)]
  40. deriving (Eq, Show)