project-m36-0.1: src/lib/ProjectM36/DataConstructorDef.hs
module ProjectM36.DataConstructorDef where
import ProjectM36.Base
import qualified ProjectM36.TypeConstructor as TC
import qualified Data.Set as S
emptyDataConstructor :: DataConstructorName -> DataConstructorDef
emptyDataConstructor name' = DataConstructorDef name' []
name :: DataConstructorDef -> DataConstructorName
name (DataConstructorDef name' _) = name'
fields :: DataConstructorDef -> [DataConstructorDefArg]
fields (DataConstructorDef _ args) = args
typeVars :: DataConstructorDef -> S.Set TypeVarName
typeVars (DataConstructorDef _ tConsArgs) = S.unions $ map typeVarsInDefArg tConsArgs
typeVarsInDefArg :: DataConstructorDefArg -> S.Set TypeVarName
typeVarsInDefArg (DataConstructorDefTypeConstructorArg tCons) = TC.typeVars tCons
typeVarsInDefArg (DataConstructorDefTypeVarNameArg pVarName) = S.singleton pVarName