module DDC.Core.Exp.Annot
        ( 
         ---------------------------------------
         -- * Abstract Syntax
          module DDC.Type.Exp

         -- ** Expressions
        , Exp           (..)
        , Lets          (..)
        , Alt           (..)
        , Pat           (..)
        , Cast          (..)

          -- ** Witnesses
        , Witness       (..)

          -- ** Data Constructors
        , DaCon         (..)

          -- ** Witness Constructors
        , WiCon         (..)

          ---------------------------------------
          -- * Predicates
        , module DDC.Type.Predicates

          -- ** Atoms
        , isXVar,  isXCon
        , isAtomX, isAtomW

          -- ** Lambdas
        , isXLAM, isXLam
        , isLambdaX

          -- ** Applications
        , isXApp

          -- ** Cast
        , isXCast
        , isXCastBox
        , isXCastRun

          -- ** Let bindings
        , isXLet

          -- ** Patterns
        , isPDefault

          -- ** Types and Witnesses
        , isXType
        , isXWitness

          ---------------------------------------
          -- * Compounds
        , module DDC.Type.Compounds

          -- ** Annotations
        , annotOfExp
        , mapAnnotOfExp

          -- ** Lambdas
        , xLAMs
        , xLams
        , makeXLamFlags
        , takeXLAMs
        , takeXLams
        , takeXLamFlags

        , Param(..)
        , takeXLamParam

          -- ** Applications
        , xApps
        , makeXAppsWithAnnots
        , takeXApps
        , takeXApps1
        , takeXAppsAsList
        , takeXAppsWithAnnots
        , takeXConApps
        , takeXPrimApps

          -- ** Lets
        , xLets
        , xLetsAnnot
        , splitXLets
        , splitXLetsAnnot
        , bindsOfLets
        , specBindsOfLets
        , valwitBindsOfLets

          -- ** Alternatives
        , patOfAlt
        , takeCtorNameOfAlt

          -- ** Patterns
        , bindsOfPat

          -- ** Casts
        , makeRuns

          -- ** Witnesses
        , wApp
        , wApps
        , annotOfWitness
        , takeXWitness
        , takeWAppsAsList
        , takePrimWiConApps

          -- ** Types
        , takeXType

          -- ** Data Constructors
        , xUnit, dcUnit
        , takeNameOfDaCon
        , takeTypeOfDaCon)
where
import DDC.Core.Exp.Annot.Exp
import DDC.Core.Exp.Annot.Compounds
import DDC.Core.Exp.Annot.Predicates
import DDC.Type.Compounds
import DDC.Type.Predicates
import DDC.Type.Exp