33 lines
1.1 KiB
Haskell
33 lines
1.1 KiB
Haskell
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
|