module ProjectM36.DataConstructorDef where import ProjectM36.Base as B import qualified Data.Set as S emptyDataConstructor :: DataConstructorName -> DataConstructorDef emptyDataConstructor :: DataConstructorName -> DataConstructorDef emptyDataConstructor DataConstructorName name' = DataConstructorName -> [DataConstructorDefArg] -> DataConstructorDef DataConstructorDef DataConstructorName name' [] name :: DataConstructorDef -> DataConstructorName name :: DataConstructorDef -> DataConstructorName name (DataConstructorDef DataConstructorName name' [DataConstructorDefArg] _) = DataConstructorName name' fields :: DataConstructorDef -> [DataConstructorDefArg] fields :: DataConstructorDef -> [DataConstructorDefArg] fields (DataConstructorDef DataConstructorName _ [DataConstructorDefArg] args) = [DataConstructorDefArg] args typeVars :: DataConstructorDef -> S.Set TypeVarName typeVars :: DataConstructorDef -> Set DataConstructorName typeVars (DataConstructorDef DataConstructorName _ [DataConstructorDefArg] tConsArgs) = [Set DataConstructorName] -> Set DataConstructorName forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a S.unions ([Set DataConstructorName] -> Set DataConstructorName) -> [Set DataConstructorName] -> Set DataConstructorName forall a b. (a -> b) -> a -> b $ (DataConstructorDefArg -> Set DataConstructorName) -> [DataConstructorDefArg] -> [Set DataConstructorName] forall a b. (a -> b) -> [a] -> [b] map DataConstructorDefArg -> Set DataConstructorName typeVarsInDefArg [DataConstructorDefArg] tConsArgs typeVarsInDefArg :: DataConstructorDefArg -> S.Set TypeVarName typeVarsInDefArg :: DataConstructorDefArg -> Set DataConstructorName typeVarsInDefArg (DataConstructorDefTypeConstructorArg TypeConstructor tCons) = TypeConstructor -> Set DataConstructorName B.typeVars TypeConstructor tCons typeVarsInDefArg (DataConstructorDefTypeVarNameArg DataConstructorName pVarName) = DataConstructorName -> Set DataConstructorName forall a. a -> Set a S.singleton DataConstructorName pVarName