module SyntaxTrees.Haskell.DataDef where import SyntaxTrees.Haskell.Common (Class, Ctor, Var) import SyntaxTrees.Haskell.Type (AnyKindedType, Type, TypeCtor, TypeParam) data TypeDef = TypeDef { TypeDef -> TypeCtor alias :: TypeCtor , TypeDef -> [TypeParam] typeParams :: [TypeParam] , TypeDef -> AnyKindedType type' :: AnyKindedType } deriving (Int -> TypeDef -> ShowS [TypeDef] -> ShowS TypeDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [TypeDef] -> ShowS $cshowList :: [TypeDef] -> ShowS show :: TypeDef -> String $cshow :: TypeDef -> String showsPrec :: Int -> TypeDef -> ShowS $cshowsPrec :: Int -> TypeDef -> ShowS Show) data NewTypeDef = NewTypeDef { NewTypeDef -> TypeCtor type' :: TypeCtor , NewTypeDef -> [TypeParam] typeParams :: [TypeParam] , NewTypeDef -> Ctor ctor :: Ctor , NewTypeDef -> FieldDef field :: FieldDef , NewTypeDef -> [DerivingClause] deriving' :: [DerivingClause] } deriving (Int -> NewTypeDef -> ShowS [NewTypeDef] -> ShowS NewTypeDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [NewTypeDef] -> ShowS $cshowList :: [NewTypeDef] -> ShowS show :: NewTypeDef -> String $cshow :: NewTypeDef -> String showsPrec :: Int -> NewTypeDef -> ShowS $cshowsPrec :: Int -> NewTypeDef -> ShowS Show) data DataDef = DataDef { DataDef -> TypeCtor type' :: TypeCtor , DataDef -> [TypeParam] typeParams :: [TypeParam] , DataDef -> [DataCtorDef] ctorDefs :: [DataCtorDef] , DataDef -> [DerivingClause] deriving' :: [DerivingClause] } deriving (Int -> DataDef -> ShowS [DataDef] -> ShowS DataDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [DataDef] -> ShowS $cshowList :: [DataDef] -> ShowS show :: DataDef -> String $cshow :: DataDef -> String showsPrec :: Int -> DataDef -> ShowS $cshowsPrec :: Int -> DataDef -> ShowS Show) data DataCtorDef = UnNamedFieldsCtor { DataCtorDef -> Ctor ctor :: Ctor , DataCtorDef -> [UnNamedFieldDef] unnamedFields :: [UnNamedFieldDef] } | NamedFieldsCtor { ctor :: Ctor , DataCtorDef -> [NamedFieldDef] namedFields :: [NamedFieldDef] } deriving (Int -> DataCtorDef -> ShowS [DataCtorDef] -> ShowS DataCtorDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [DataCtorDef] -> ShowS $cshowList :: [DataCtorDef] -> ShowS show :: DataCtorDef -> String $cshow :: DataCtorDef -> String showsPrec :: Int -> DataCtorDef -> ShowS $cshowsPrec :: Int -> DataCtorDef -> ShowS Show) data FieldDef = UnNamedField UnNamedFieldDef | NamedField NamedFieldDef deriving (Int -> FieldDef -> ShowS [FieldDef] -> ShowS FieldDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [FieldDef] -> ShowS $cshowList :: [FieldDef] -> ShowS show :: FieldDef -> String $cshow :: FieldDef -> String showsPrec :: Int -> FieldDef -> ShowS $cshowsPrec :: Int -> FieldDef -> ShowS Show) data UnNamedFieldDef = UnNamedFieldDef { UnNamedFieldDef -> Type type' :: Type } deriving (Int -> UnNamedFieldDef -> ShowS [UnNamedFieldDef] -> ShowS UnNamedFieldDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [UnNamedFieldDef] -> ShowS $cshowList :: [UnNamedFieldDef] -> ShowS show :: UnNamedFieldDef -> String $cshow :: UnNamedFieldDef -> String showsPrec :: Int -> UnNamedFieldDef -> ShowS $cshowsPrec :: Int -> UnNamedFieldDef -> ShowS Show) data NamedFieldDef = NamedFieldDef { NamedFieldDef -> Var name :: Var , NamedFieldDef -> Type type' :: Type } deriving (Int -> NamedFieldDef -> ShowS [NamedFieldDef] -> ShowS NamedFieldDef -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [NamedFieldDef] -> ShowS $cshowList :: [NamedFieldDef] -> ShowS show :: NamedFieldDef -> String $cshow :: NamedFieldDef -> String showsPrec :: Int -> NamedFieldDef -> ShowS $cshowsPrec :: Int -> NamedFieldDef -> ShowS Show) data DerivingClause = Deriving DerivingStrategy [Class] | DerivingVia [Class] AnyKindedType deriving (Int -> DerivingClause -> ShowS [DerivingClause] -> ShowS DerivingClause -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [DerivingClause] -> ShowS $cshowList :: [DerivingClause] -> ShowS show :: DerivingClause -> String $cshow :: DerivingClause -> String showsPrec :: Int -> DerivingClause -> ShowS $cshowsPrec :: Int -> DerivingClause -> ShowS Show) data DerivingStrategy = StandardDeriving | NewTypeDeriving | AnyClassDeriving deriving (DerivingStrategy -> DerivingStrategy -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: DerivingStrategy -> DerivingStrategy -> Bool $c/= :: DerivingStrategy -> DerivingStrategy -> Bool == :: DerivingStrategy -> DerivingStrategy -> Bool $c== :: DerivingStrategy -> DerivingStrategy -> Bool Eq, Int -> DerivingStrategy -> ShowS [DerivingStrategy] -> ShowS DerivingStrategy -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [DerivingStrategy] -> ShowS $cshowList :: [DerivingStrategy] -> ShowS show :: DerivingStrategy -> String $cshow :: DerivingStrategy -> String showsPrec :: Int -> DerivingStrategy -> ShowS $cshowsPrec :: Int -> DerivingStrategy -> ShowS Show) derivingClasses :: DerivingClause -> [(DerivingStrategy, Class)] derivingClasses :: DerivingClause -> [(DerivingStrategy, Class)] derivingClasses (Deriving DerivingStrategy x [Class] y) = (DerivingStrategy x,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [Class] y derivingClasses (DerivingVia [Class] x AnyKindedType _) = (DerivingStrategy StandardDeriving,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [Class] x