module Fun.Tree where data Tree = Tree [Program] deriving Show data Program = Program [Block] deriving Show data Block = Block FunctionBlock -- | Block DataBlock ... deriving Show data FunctionBlock = FunctionBlock FunctionDeclaration [FunctionDefinition] deriving Show data Visibility = PublicVisibility | PrivateVisibility deriving Show data FunctionDeclaration = FunctionDeclaration String Visibility [String] [FunctionFlag] deriving Show data FunctionFlag = FunctionInline | FunctionDeprecated | FunctionUnknown deriving Show instance Read FunctionFlag where readsPrec _ "inline" = [(FunctionInline, "")] readsPrec _ "deprecated" = [(FunctionDeprecated, "")] readsPrec _ _ = [(FunctionUnknown, "")] data FunctionDefinition = FunctionDefinition FunctionPattern FunctionBody deriving Show data FunctionPattern = FunctionPattern [FunctionPatternElement] deriving Show data FunctionPatternElement = FunctionPatternParameter String | FunctionPatternString String | FunctionPatternNumber Integer | Wildcard deriving Show data FunctionBody = FunctionBody [FunctionBodyElement] deriving Show data FunctionBodyElement = Statement String | FunctionBodyIdentifier String | FunctionBodyParameter String | FunctionBodyString String | FunctionBodyNumber Integer deriving Show