module SyntaxTrees.Haskell.Type where import SyntaxTrees.Haskell.Common (Module, QClass) newtype TypeParam = TypeParam String deriving (TypeParam -> TypeParam -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: TypeParam -> TypeParam -> Bool $c/= :: TypeParam -> TypeParam -> Bool == :: TypeParam -> TypeParam -> Bool $c== :: TypeParam -> TypeParam -> Bool Eq, Eq TypeParam TypeParam -> TypeParam -> Bool TypeParam -> TypeParam -> Ordering TypeParam -> TypeParam -> TypeParam forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: TypeParam -> TypeParam -> TypeParam $cmin :: TypeParam -> TypeParam -> TypeParam max :: TypeParam -> TypeParam -> TypeParam $cmax :: TypeParam -> TypeParam -> TypeParam >= :: TypeParam -> TypeParam -> Bool $c>= :: TypeParam -> TypeParam -> Bool > :: TypeParam -> TypeParam -> Bool $c> :: TypeParam -> TypeParam -> Bool <= :: TypeParam -> TypeParam -> Bool $c<= :: TypeParam -> TypeParam -> Bool < :: TypeParam -> TypeParam -> Bool $c< :: TypeParam -> TypeParam -> Bool compare :: TypeParam -> TypeParam -> Ordering $ccompare :: TypeParam -> TypeParam -> Ordering Ord, Int -> TypeParam -> String -> String [TypeParam] -> String -> String TypeParam -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [TypeParam] -> String -> String $cshowList :: [TypeParam] -> String -> String show :: TypeParam -> String $cshow :: TypeParam -> String showsPrec :: Int -> TypeParam -> String -> String $cshowsPrec :: Int -> TypeParam -> String -> String Show) data TypeVar = TypeVar String | UnitType deriving (Int -> TypeVar -> String -> String [TypeVar] -> String -> String TypeVar -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [TypeVar] -> String -> String $cshowList :: [TypeVar] -> String -> String show :: TypeVar -> String $cshow :: TypeVar -> String showsPrec :: Int -> TypeVar -> String -> String $cshowsPrec :: Int -> TypeVar -> String -> String Show) data TypeCtor = TypeCtor String | Arrow | TupleType | ListType deriving (Int -> TypeCtor -> String -> String [TypeCtor] -> String -> String TypeCtor -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [TypeCtor] -> String -> String $cshowList :: [TypeCtor] -> String -> String show :: TypeCtor -> String $cshow :: TypeCtor -> String showsPrec :: Int -> TypeCtor -> String -> String $cshowsPrec :: Int -> TypeCtor -> String -> String Show) data AnyKindedType = TypeValue Type | TypeFn QTypeCtor deriving (Int -> AnyKindedType -> String -> String [AnyKindedType] -> String -> String AnyKindedType -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [AnyKindedType] -> String -> String $cshowList :: [AnyKindedType] -> String -> String show :: AnyKindedType -> String $cshow :: AnyKindedType -> String showsPrec :: Int -> AnyKindedType -> String -> String $cshowsPrec :: Int -> AnyKindedType -> String -> String Show) data ClassConstraint = ClassConstraint QClass [Type] deriving (Int -> ClassConstraint -> String -> String [ClassConstraint] -> String -> String ClassConstraint -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [ClassConstraint] -> String -> String $cshowList :: [ClassConstraint] -> String -> String show :: ClassConstraint -> String $cshow :: ClassConstraint -> String showsPrec :: Int -> ClassConstraint -> String -> String $cshowsPrec :: Int -> ClassConstraint -> String -> String Show) data Type = CtorTypeApply QTypeCtor [Type] | ParamTypeApply TypeParam [Type] | NestedTypeApply Type [Type] | TypeVar' QTypeVar | TypeParam' TypeParam | TypeScope [TypeParam] Type | ClassScope [ClassConstraint] Type deriving (Int -> Type -> String -> String [Type] -> String -> String Type -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [Type] -> String -> String $cshowList :: [Type] -> String -> String show :: Type -> String $cshow :: Type -> String showsPrec :: Int -> Type -> String -> String $cshowsPrec :: Int -> Type -> String -> String Show) data QTypeVar = QTypeVar (Maybe Module) TypeVar deriving (Int -> QTypeVar -> String -> String [QTypeVar] -> String -> String QTypeVar -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [QTypeVar] -> String -> String $cshowList :: [QTypeVar] -> String -> String show :: QTypeVar -> String $cshow :: QTypeVar -> String showsPrec :: Int -> QTypeVar -> String -> String $cshowsPrec :: Int -> QTypeVar -> String -> String Show) data QTypeCtor = QTypeCtor (Maybe Module) TypeCtor deriving (Int -> QTypeCtor -> String -> String [QTypeCtor] -> String -> String QTypeCtor -> String forall a. (Int -> a -> String -> String) -> (a -> String) -> ([a] -> String -> String) -> Show a showList :: [QTypeCtor] -> String -> String $cshowList :: [QTypeCtor] -> String -> String show :: QTypeCtor -> String $cshow :: QTypeCtor -> String showsPrec :: Int -> QTypeCtor -> String -> String $cshowsPrec :: Int -> QTypeCtor -> String -> String Show)