packages feed

ddc-source-tetra-0.4.3.1: DDC/Source/Tetra/Exp.hs

-- | Definition of Source Tetra Abstract Syntax,
--   and utilities for working with it.
module DDC.Source.Tetra.Exp
        ( -- * Binding
          Name
        , Bind          (..)
        , Bound         (..)
        , takeBoundOfBind

          -------------------------------------------------
          -- * Types

          -----------------------------
          -- ** Syntax
          -- *** Expressions
        , Type,         GType  (..)

          -- *** TyCons
        , TyCon,        GTyCon (..)
        , TyConBind     (..)
        , TyConBound    (..)

          -----------------------------
          -- ** Type Generics
        , Source        (..)
        , GTAnnot
        , GTBindVar,    GTBoundVar
        , GTBindCon,    GTBoundCon
        , GTPrim

          -----------------------------
          -- ** Type Constructors
        , SoCon         (..)
        , KiCon         (..)
        , TwCon         (..)
        , TcCon         (..)

          -----------------------------
          -- ** Type Primitives 
        , PrimType       (..)
        , PrimTyCon      (..)
        , PrimTyConTetra (..)

          -----------------------------
          -- ** Pattern Synonyms
        , pattern TApp2, pattern TApp3
        , pattern TApp4, pattern TApp5

        , pattern TVoid, pattern TUnit
        , pattern TFun
        , pattern TBot,  pattern TUnion
        , pattern TPrim

        , pattern KData, pattern KRegion, pattern KEffect
        , pattern TImpl
        , pattern TSusp
        , pattern TRead, pattern TWrite,  pattern TAlloc

        , pattern TBool
        , pattern TNat,  pattern TInt
        , pattern TSize, pattern TWord
        , pattern TFloat
        , pattern TTextLit

          -----------------------------
          -- ** Predicates
        , isAtomT

          -----------------------------
          -- ** Compounds
        , -- *** Destructors
          takeTCon
        , takeTVar
        , takeTAbs
        , takeTApp

          -- *** Type Applications
        , makeTApps,    takeTApps

          -- *** Function Types
        , makeTFun,     makeTFuns,      makeTFuns',     (~>)
        , takeTFun,     takeTFuns,      takeTFuns'

          -- *** Forall Types
        , makeTForall,  makeTForalls 
        , takeTForall

          -- *** Exists Types
        , makeTExists,  takeTExists

          -- *** Union types
        , takeTUnion
        , makeTUnions,  takeTUnions
        , splitTUnionsOfKind
        , makeTBot

          -------------------------------------------------
          -- * Terms
          -- ** Syntax
        , Annot,        GXAnnot
        , BindVar,      GXBindVar
        , BindVarMT,    GXBindVarMT (..)
        , BoundVar,     GXBoundVar
        , BindCon,      GXBindCon
        , BoundCon,     GXBoundCon
        , Prim,         GXPrim

          -- *** Expressions
        , Exp,          GExp        (..)

          -- *** Let-binding
        , Lets,         GLets       (..)

          -- *** Clauses
        , Clause,       GClause     (..)

          -- *** Parameters
        , Param,        GParam      (..)

          -- *** Patterns
        , Pat,          GPat        (..)

          -- *** Guards
        , Guard,        GGuard      (..)

          -- *** Guarded Expressions
        , GuardedExp,   GGuardedExp (..)

          -- *** Case Alternatives
        , AltCase,      GAltCase    (..)
        , AltMatch,     GAltMatch   (..)

          -- *** Casts
        , Cast,         GCast       (..)

          -- *** Witnesses
        , Witness,      GWitness    (..)

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

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

          -----------------------------
          -- ** Term Primitives
        , PrimVal       (..)
        , PrimArith     (..)
        , OpVector      (..)
        , OpFun         (..)
        , OpError       (..)
        , PrimLit       (..)

          -----------------------------
          -- ** Pattern Synonyms
        , pattern PTrue
        , pattern PFalse

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

          -- *** Lambdas
        , isXLAM, isXLam
        , isLambdaX

          -- *** Applications
        , isXApp

          -- *** Let bindings
        , isXLet

          -- *** Types and Witnesses
        , isXType
        , isXWitness

          -- *** Patterns
        , isPDefault

          -----------------------------
          -- ** Compounds
        , takeAnnotOfExp

          -- *** Binds
        , bindOfBindMT
        , takeTypeOfBindMT

          -- *** Lambdas
        , makeXLAMs
        , makeXLams
        , makeXLamFlags
        , takeXLAMs
        , takeXLams
        , takeXLamFlags

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

          -- *** Clauses
        , bindOfClause

          -- *** Casts
        , pattern XRun
        , pattern XBox

          -- *** Data Constructors
        , dcUnit
        , takeNameOfDaCon
        , takeTypeOfDaCon

          -- *** Patterns
        , bindsOfPat

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

        -------------------------------------------------
        -- * Dictionaries
        , ShowLanguage
        , PrettyLanguage
        , NFDataLanguage)
where
import DDC.Source.Tetra.Exp.Bind
import DDC.Source.Tetra.Exp.Source
import DDC.Source.Tetra.Exp.Predicates
import DDC.Source.Tetra.Exp.Compounds
import DDC.Source.Tetra.Exp.NFData
import DDC.Source.Tetra.Pretty
import DDC.Type.Exp.Generic.Compounds