module Language.Abs where
newtype Ident = Ident String deriving (Eq,Ord,Show,Read)
newtype VerIdent = VerIdent String deriving (Eq,Ord,Show,Read)
newtype RouteIdent = RouteIdent String deriving (Eq,Ord,Show,Read)
data Specification =
Spec Name Version Modules [EnumType] [StructType] [Resource]
deriving (Eq,Ord,Show,Read)
data Name =
Nm Ident
deriving (Eq,Ord,Show,Read)
data Version =
Ver VerIdent
deriving (Eq,Ord,Show,Read)
data Modules =
EmptyMods
| Mods [Ident]
deriving (Eq,Ord,Show,Read)
data EnumType =
DefEnum Ident [EnumVal]
deriving (Eq,Ord,Show,Read)
data StructType =
DefStr Ident [Field]
deriving (Eq,Ord,Show,Read)
data Resource =
Res Ident RouteIdent Mode
deriving (Eq,Ord,Show,Read)
data Mode =
ReadOnly
| Write
deriving (Eq,Ord,Show,Read)
data Field =
FDef [Annotation] Ident FType
deriving (Eq,Ord,Show,Read)
data FType =
FString
| FInt
| FLong
| FDouble
| FDefined Ident
| FList FType
deriving (Eq,Ord,Show,Read)
data Annotation =
Ann Ident
deriving (Eq,Ord,Show,Read)
data EnumVal =
EnVal Ident
deriving (Eq,Ord,Show,Read)