moduleDDC.Core.Exp.DaCon(DaCon(..)-- * Compounds,dcUnit,takeNameOfDaCon,takeTypeOfDaCon)whereimportDDC.Type.CompoundsimportDDC.Type.ExpimportControl.DeepSeq-- | Data constructors.dataDaConn-- | Baked in unit data constructor.=DaConUnit-- | Primitive data constructor used for literals and baked-in-- constructors. ---- The type of the constructor needs to be attached to handle the-- case where there are too many constructors in the data type to list, -- like for Int literals. In this case we determine what data type-- it belongs to from the attached type of the data constructor.-- |DaConPrim{-- | Name of the data constructor.daConName::!n-- | Type of the data constructor.,daConType::!(Typen)}-- | Data constructor that has a data type declaration.|DaConBound{-- | Name of the data constructor.daConName::!n}deriving(Show,Eq)instanceNFDatan=>NFData(DaConn)wherernf!dc=casedcofDaConUnit->()DaConPrimnt->rnfn`seq`rnftDaConBoundn->rnfn-- | Take the name of data constructor,-- if there is one.takeNameOfDaCon::DaConn->MaybentakeNameOfDaCondc=casedcofDaConUnit->NothingDaConPrim{}->Just$daConNamedcDaConBound{}->Just$daConNamedc-- | Take the type annotation of a data constructor,-- if we know it locally.takeTypeOfDaCon::DaConn->Maybe(Typen)takeTypeOfDaCondc=casedcofDaConUnit->Just$tUnitDaConPrim{}->Just$daConTypedcDaConBound{}->Nothing-- | The unit data constructor.dcUnit::DaConndcUnit=DaConUnit