module ClassTypeParameter (module ClassTypeParameter) where import PrimitiveTypes import Numeric.Natural (Natural) -- TODO: Annotations data ClassTypeParameter = ClassTypeParameter { name :: String , extends :: Maybe TypeBound , implements :: [ClassType] } deriving Show data TypeBound = SimpleTypeBound String | ClassTypeBound ClassType [ClassType] deriving Show data ClassType = RecursiveTypeBound ClassType String [TypeArgument] | NonRecursiveTypeBound String [TypeArgument] deriving Show data TypeArgument = ReferenceTypeArgument ReferenceType | WildCardTypeArgument WildCard deriving Show data WildCard = WildCard (Maybe WildCardBound) deriving Show data WildCardBound = SuperWildCardBound ReferenceType | ExtendsWildCardBound ReferenceType deriving Show data ReferenceType = ClassReferenceType ClassType | VariableReferenceType String | ArrayReferenceType ArrayType deriving Show data ArrayType = PrimitiveArrayType PrimitiveType Natural | ClassArrayType ClassType Natural | VariableArrayType String Natural deriving Show