| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
ReWire.Eidos.Syntax
Description
The abstract syntax of Eidos, the typed functional IR between GHC Core and the machine level (a system-F-lite mirror of GHC Core, specified in doc/eidos.md). The machine level's process calculus lives in ReWire.Synolon.Syntax, which embeds these expression types. Conventions the rest of the compiler relies on:
- Binders are globally unique (
Uniq): every binding site in a program carries a distinct unique, established by the bridge and preserved by every pass (duplication goes through a refreshing clone).Idequality and hashing are by unique only. - Types are plain data (no binders):
Tyhas no forall; quantification appears only inSig, as a plain type-variable list. Every binder carries its full signature, sotypeOfis total and synthesizing. - There is no term equality instance: comparing terms for alpha
equivalence is an explicit operation — canonical renumbering, as in
ReWire.Eidos.Simplify's canonKey (through
refreshExp) and ReWire.Eidos.ProcOpt's blockKey (its own dense renumbering) — never accidental structural comparison (which would be annotation- and unique-sensitive). - Annotations (
Annote) are semantically inert and never compared.
Synopsis
- type Uniq = Int
- type TyConId = Text
- type DataConId = Text
- data Kind
- data TyVar = TyVar {}
- data Ty
- data Sig = Sig {}
- monoSig :: Ty -> Sig
- data Id = Id {}
- data JoinId = JoinId {}
- data Exp
- data Arg
- data Bind
- data Alt = Alt Annote !AltCon ![Id] !Exp
- data AltCon
- = DataAlt !DataConId
- | LitAlt !Integer
- | DefaultAlt
- data Defn = Defn {
- defnAnnote :: Annote
- defnId :: !Id
- defnParams :: ![Id]
- defnBody :: !Exp
- defnAttr :: !(Maybe DefnAttr)
- defnOrigin :: !(Maybe SpecOrigin)
- data DefnAttr
- data SpecOrigin
- = SpecOrigin {
- originName :: !Text
- originArgs :: ![Ty]
- | BakeOrigin !Text
- = SpecOrigin {
- data DataDefn = DataDefn {}
- data DataCon = DataCon Annote !DataConId !Sig
- data Program = Program {}
Documentation
Binder uniques. Globally unique per program by construction (bridge) and by maintenance (every duplicating pass refreshes them).
Type constructor and data constructor names are stable global text (dotted, never shadowed); they carry no uniques.
Instances
| NFData Kind Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Kind Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Kind -> c Kind # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Kind # dataTypeOf :: Kind -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Kind) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Kind) # gmapT :: (forall b. Data b => b -> b) -> Kind -> Kind # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Kind -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Kind -> r # gmapQ :: (forall d. Data d => d -> u) -> Kind -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Kind -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Kind -> m Kind # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Kind -> m Kind # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Kind -> m Kind # | |||||
| Generic Kind Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Kind Source # | |||||
| Eq Kind Source # | |||||
| Ord Kind Source # | |||||
| Hashable Kind Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Pretty Kind Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Kind Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Kind = D1 ('MetaData "Kind" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "KStar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KNat" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KFun" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind)))) | |||||
A type variable: display text, unique, kind. Equality and hashing by unique only.
Instances
| NFData TyVar Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data TyVar Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TyVar -> c TyVar # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c TyVar # dataTypeOf :: TyVar -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c TyVar) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TyVar) # gmapT :: (forall b. Data b => b -> b) -> TyVar -> TyVar # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> TyVar -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> TyVar -> r # gmapQ :: (forall d. Data d => d -> u) -> TyVar -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> TyVar -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> TyVar -> m TyVar # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TyVar -> m TyVar # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TyVar -> m TyVar # | |||||
| Generic TyVar Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show TyVar Source # | |||||
| Eq TyVar Source # | |||||
| Ord TyVar Source # | |||||
| Hashable TyVar Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Pretty TyVar Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep TyVar Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep TyVar = D1 ('MetaData "TyVar" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "TyVar" 'PrefixI 'True) (S1 ('MetaSel ('Just "tvOcc") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: (S1 ('MetaSel ('Just "tvUniq") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Uniq) :*: S1 ('MetaSel ('Just "tvKind") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind)))) | |||||
Types: plain first-order data, no binders, no forall. Type-level
naturals appear literally (TyNat) or as applications of the built-in
arithmetic type constructors (see ReWire.Eidos.Types.natNorm).
Annotations are inert; the Eq/Ord/Hashable instances ignore them.
Constructors
| TyCon Annote !TyConId | |
| TyApp Annote !Ty !Ty | |
| TyVarT Annote !TyVar | |
| TyNat Annote !Natural | |
| Arrow Annote !Ty !Ty |
Instances
A signature: quantified type variables (empty for every local binder; possibly non-empty for top-level definitions, constructors, and primitive references) over a forall-free type.
Instances
| NFData Sig Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Sig Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sig -> c Sig # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Sig # dataTypeOf :: Sig -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Sig) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Sig) # gmapT :: (forall b. Data b => b -> b) -> Sig -> Sig # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sig -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sig -> r # gmapQ :: (forall d. Data d => d -> u) -> Sig -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Sig -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sig -> m Sig # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sig -> m Sig # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sig -> m Sig # | |||||
| Generic Sig Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Sig Source # | |||||
| Eq Sig Source # | |||||
| Hashable Sig Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Pretty Sig Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Sig Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Sig = D1 ('MetaData "Sig" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Sig" 'PrefixI 'True) (S1 ('MetaSel ('Just "sigTVs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [TyVar]) :*: S1 ('MetaSel ('Just "sigTy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty))) | |||||
A term-level name: display text, unique, signature. Locals always have
monomorphic signatures (monoSig); top-level definition names may be
polymorphic until specialization. Equality and hashing by unique only.
Instances
| NFData Id Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Id Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Id -> c Id # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Id # dataTypeOf :: Id -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Id) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Id) # gmapT :: (forall b. Data b => b -> b) -> Id -> Id # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Id -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Id -> r # gmapQ :: (forall d. Data d => d -> u) -> Id -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Id -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Id -> m Id # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Id -> m Id # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Id -> m Id # | |||||
| Generic Id Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Id Source # | |||||
| Eq Id Source # | |||||
| Ord Id Source # | |||||
| Hashable Id Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Pretty Id Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Id Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Id = D1 ('MetaData "Id" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Id" 'PrefixI 'True) (S1 ('MetaSel ('Just "idOcc") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: (S1 ('MetaSel ('Just "idUniq") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Uniq) :*: S1 ('MetaSel ('Just "idSig") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Sig)))) | |||||
A join point name: an Id plus the number of value parameters every
Jump to it must supply (jumps are saturated).
Instances
| NFData JoinId Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data JoinId Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> JoinId -> c JoinId # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c JoinId # toConstr :: JoinId -> Constr # dataTypeOf :: JoinId -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c JoinId) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JoinId) # gmapT :: (forall b. Data b => b -> b) -> JoinId -> JoinId # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JoinId -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JoinId -> r # gmapQ :: (forall d. Data d => d -> u) -> JoinId -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> JoinId -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> JoinId -> m JoinId # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> JoinId -> m JoinId # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> JoinId -> m JoinId # | |||||
| Generic JoinId Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show JoinId Source # | |||||
| Eq JoinId Source # | |||||
| Hashable JoinId Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| type Rep JoinId Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep JoinId = D1 ('MetaData "JoinId" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "JoinId" 'PrefixI 'True) (S1 ('MetaSel ('Just "jpId") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Just "jpArity") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int))) | |||||
Expressions. Type occurrences: Var reads its type off the Id
signature; Con, Prim, and the literals carry their (instantiated)
type at the occurrence; everything else synthesizes (see
ReWire.Eidos.Types.typeOf).
Constructors
| Var Annote !Id | |
| Con Annote !Ty !DataConId | |
| Prim Annote !Ty !Builtin | |
| LitInt Annote !Ty !Integer | |
| LitStr Annote !Text | |
| LitList Annote !Ty ![Exp] | |
| LitVec Annote !Ty ![Exp] | |
| App Annote !Exp !Arg | |
| Lam Annote !Id !Exp | |
| Let Annote !Bind !Exp | |
| Jump Annote !JoinId ![Exp] | |
| Case Annote !Ty !Exp !Id ![Alt] |
Instances
| NFData Exp Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Exp Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Exp -> c Exp # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Exp # dataTypeOf :: Exp -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Exp) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Exp) # gmapT :: (forall b. Data b => b -> b) -> Exp -> Exp # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Exp -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Exp -> r # gmapQ :: (forall d. Data d => d -> u) -> Exp -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Exp -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Exp -> m Exp # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Exp -> m Exp # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Exp -> m Exp # | |||||
| Generic Exp Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Exp Source # | |||||
| Pretty Exp Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| Annotated Exp Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| type Rep Exp Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Exp = D1 ('MetaData "Exp" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (((C1 ('MetaCons "Var" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id)) :+: (C1 ('MetaCons "Con" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DataConId))) :+: C1 ('MetaCons "Prim" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Builtin))))) :+: (C1 ('MetaCons "LitInt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer))) :+: (C1 ('MetaCons "LitStr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)) :+: C1 ('MetaCons "LitList" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Exp])))))) :+: ((C1 ('MetaCons "LitVec" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Exp]))) :+: (C1 ('MetaCons "App" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Arg))) :+: C1 ('MetaCons "Lam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp))))) :+: (C1 ('MetaCons "Let" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bind) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp))) :+: (C1 ('MetaCons "Jump" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 JoinId) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Exp]))) :+: C1 ('MetaCons "Case" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Alt])))))))) | |||||
An application argument: a term or a type. Type arguments instantiate the head's signature variables in order; the specializer is driven by them.
Instances
| NFData Arg Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Arg Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Arg -> c Arg # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Arg # dataTypeOf :: Arg -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Arg) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Arg) # gmapT :: (forall b. Data b => b -> b) -> Arg -> Arg # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arg -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arg -> r # gmapQ :: (forall d. Data d => d -> u) -> Arg -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Arg -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Arg -> m Arg # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg -> m Arg # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg -> m Arg # | |||||
| Generic Arg Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Arg Source # | |||||
| Pretty Arg Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Arg Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Arg = D1 ('MetaData "Arg" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "EArg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp)) :+: C1 ('MetaCons "TArg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty))) | |||||
Local bindings. Join declares a join point whose body ends the
enclosing scope's continuation (Jump is the only way to reach it);
the parameter list length must equal the JoinId arity.
Instances
| NFData Bind Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Bind Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Bind -> c Bind # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Bind # dataTypeOf :: Bind -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Bind) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Bind) # gmapT :: (forall b. Data b => b -> b) -> Bind -> Bind # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Bind -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Bind -> r # gmapQ :: (forall d. Data d => d -> u) -> Bind -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Bind -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Bind -> m Bind # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Bind -> m Bind # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Bind -> m Bind # | |||||
| Generic Bind Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Bind Source # | |||||
| Pretty Bind Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Bind Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Bind = D1 ('MetaData "Bind" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "NonRec" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp)) :+: (C1 ('MetaCons "Rec" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [(Id, Exp)])) :+: C1 ('MetaCons "Join" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 JoinId) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Id]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp))))) | |||||
Case alternatives. The default alternative, if present, comes first (the Core convention); constructor alternatives bind their fields.
Instances
| NFData Alt Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Alt Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Alt -> c Alt # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Alt # dataTypeOf :: Alt -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Alt) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Alt) # gmapT :: (forall b. Data b => b -> b) -> Alt -> Alt # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Alt -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Alt -> r # gmapQ :: (forall d. Data d => d -> u) -> Alt -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Alt -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Alt -> m Alt # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Alt -> m Alt # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Alt -> m Alt # | |||||
| Generic Alt Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Alt Source # | |||||
| Pretty Alt Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Alt Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Alt = D1 ('MetaData "Alt" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Alt" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 AltCon)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Id]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp)))) | |||||
Constructors
| DataAlt !DataConId | |
| LitAlt !Integer | |
| DefaultAlt |
Instances
| NFData AltCon Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data AltCon Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> AltCon -> c AltCon # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c AltCon # toConstr :: AltCon -> Constr # dataTypeOf :: AltCon -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c AltCon) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AltCon) # gmapT :: (forall b. Data b => b -> b) -> AltCon -> AltCon # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> AltCon -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> AltCon -> r # gmapQ :: (forall d. Data d => d -> u) -> AltCon -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> AltCon -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> AltCon -> m AltCon # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> AltCon -> m AltCon # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> AltCon -> m AltCon # | |||||
| Generic AltCon Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show AltCon Source # | |||||
| Eq AltCon Source # | |||||
| Hashable AltCon Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| type Rep AltCon Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep AltCon = D1 ('MetaData "AltCon" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "DataAlt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DataConId)) :+: (C1 ('MetaCons "LitAlt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer)) :+: C1 ('MetaCons "DefaultAlt" 'PrefixI 'False) (U1 :: Type -> Type))) | |||||
A top-level definition: name (whose signature is the definition's signature), a parameter telescope (arity is structural: length matches the signature's arrow spine prefix), and a body.
Constructors
| Defn | |
Fields
| |
Instances
| NFData Defn Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Defn Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Defn -> c Defn # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Defn # dataTypeOf :: Defn -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Defn) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Defn) # gmapT :: (forall b. Data b => b -> b) -> Defn -> Defn # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Defn -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Defn -> r # gmapQ :: (forall d. Data d => d -> u) -> Defn -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Defn -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Defn -> m Defn # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Defn -> m Defn # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Defn -> m Defn # | |||||
| Generic Defn Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Defn Source # | |||||
| Pretty Defn Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Defn Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Defn = D1 ('MetaData "Defn" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Defn" 'PrefixI 'True) ((S1 ('MetaSel ('Just "defnAnnote") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Just "defnId") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id) :*: S1 ('MetaSel ('Just "defnParams") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Id]))) :*: (S1 ('MetaSel ('Just "defnBody") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp) :*: (S1 ('MetaSel ('Just "defnAttr") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe DefnAttr)) :*: S1 ('MetaSel ('Just "defnOrigin") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe SpecOrigin)))))) | |||||
Instances
| NFData DefnAttr Source # | |
Defined in ReWire.Eidos.Syntax | |
| Data DefnAttr Source # | |
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DefnAttr -> c DefnAttr # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DefnAttr # toConstr :: DefnAttr -> Constr # dataTypeOf :: DefnAttr -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DefnAttr) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DefnAttr) # gmapT :: (forall b. Data b => b -> b) -> DefnAttr -> DefnAttr # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DefnAttr -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DefnAttr -> r # gmapQ :: (forall d. Data d => d -> u) -> DefnAttr -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> DefnAttr -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> DefnAttr -> m DefnAttr # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DefnAttr -> m DefnAttr # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DefnAttr -> m DefnAttr # | |
| Generic DefnAttr Source # | |
Defined in ReWire.Eidos.Syntax | |
| Show DefnAttr Source # | |
| Eq DefnAttr Source # | |
| Ord DefnAttr Source # | |
Defined in ReWire.Eidos.Syntax | |
| Hashable DefnAttr Source # | |
Defined in ReWire.Eidos.Syntax | |
| type Rep DefnAttr Source # | |
data SpecOrigin Source #
Provenance of a compiler-minted definition clone: the origin
definition's display name and — for specializer clones — the type
arguments it was instantiated at (BakeOrigin marks the partial
evaluator's value-baked clones, whose baked arguments are terms, not
types). Rides into dumps, error messages, and (stably) generated HDL
names.
Constructors
| SpecOrigin | |
Fields
| |
| BakeOrigin !Text | |
Instances
| NFData SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax Methods rnf :: SpecOrigin -> () # | |||||
| Data SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SpecOrigin -> c SpecOrigin # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SpecOrigin # toConstr :: SpecOrigin -> Constr # dataTypeOf :: SpecOrigin -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SpecOrigin) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SpecOrigin) # gmapT :: (forall b. Data b => b -> b) -> SpecOrigin -> SpecOrigin # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SpecOrigin -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SpecOrigin -> r # gmapQ :: (forall d. Data d => d -> u) -> SpecOrigin -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SpecOrigin -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SpecOrigin -> m SpecOrigin # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SpecOrigin -> m SpecOrigin # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SpecOrigin -> m SpecOrigin # | |||||
| Generic SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax Methods showsPrec :: Int -> SpecOrigin -> ShowS # show :: SpecOrigin -> String # showList :: [SpecOrigin] -> ShowS # | |||||
| Eq SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Hashable SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| type Rep SpecOrigin Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep SpecOrigin = D1 ('MetaData "SpecOrigin" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "SpecOrigin" 'PrefixI 'True) (S1 ('MetaSel ('Just "originName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: S1 ('MetaSel ('Just "originArgs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Ty])) :+: C1 ('MetaCons "BakeOrigin" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text))) | |||||
A datatype declaration. Constructor signatures quantify the datatype's
parameters: C :: forall as. t1 -> ... -> tk -> T as.
Constructors
| DataDefn | |
Instances
| NFData DataDefn Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data DataDefn Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DataDefn -> c DataDefn # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DataDefn # toConstr :: DataDefn -> Constr # dataTypeOf :: DataDefn -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DataDefn) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DataDefn) # gmapT :: (forall b. Data b => b -> b) -> DataDefn -> DataDefn # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DataDefn -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DataDefn -> r # gmapQ :: (forall d. Data d => d -> u) -> DataDefn -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> DataDefn -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> DataDefn -> m DataDefn # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DataDefn -> m DataDefn # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DataDefn -> m DataDefn # | |||||
| Generic DataDefn Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show DataDefn Source # | |||||
| Pretty DataDefn Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep DataDefn Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep DataDefn = D1 ('MetaData "DataDefn" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "DataDefn" 'PrefixI 'True) ((S1 ('MetaSel ('Just "dataAnnote") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Just "dataName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyConId)) :*: (S1 ('MetaSel ('Just "dataKind") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Kind) :*: S1 ('MetaSel ('Just "dataCons") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [DataCon])))) | |||||
Instances
| NFData DataCon Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data DataCon Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DataCon -> c DataCon # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DataCon # toConstr :: DataCon -> Constr # dataTypeOf :: DataCon -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DataCon) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DataCon) # gmapT :: (forall b. Data b => b -> b) -> DataCon -> DataCon # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DataCon -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DataCon -> r # gmapQ :: (forall d. Data d => d -> u) -> DataCon -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> DataCon -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> DataCon -> m DataCon # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DataCon -> m DataCon # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DataCon -> m DataCon # | |||||
| Generic DataCon Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show DataCon Source # | |||||
| Pretty DataCon Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep DataCon Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep DataCon = D1 ('MetaData "DataCon" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "DataCon" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 DataConId) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Sig)))) | |||||
A whole program: datatypes, definitions, and the designated device root.
Instances
| NFData Program Source # | |||||
Defined in ReWire.Eidos.Syntax | |||||
| Data Program Source # | |||||
Defined in ReWire.Eidos.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Program -> c Program # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Program # toConstr :: Program -> Constr # dataTypeOf :: Program -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Program) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Program) # gmapT :: (forall b. Data b => b -> b) -> Program -> Program # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Program -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Program -> r # gmapQ :: (forall d. Data d => d -> u) -> Program -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Program -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Program -> m Program # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Program -> m Program # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Program -> m Program # | |||||
| Generic Program Source # | |||||
Defined in ReWire.Eidos.Syntax Associated Types
| |||||
| Show Program Source # | |||||
| Pretty Program Source # | |||||
Defined in ReWire.Eidos.Pretty | |||||
| type Rep Program Source # | |||||
Defined in ReWire.Eidos.Syntax type Rep Program = D1 ('MetaData "Program" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Program" 'PrefixI 'True) (S1 ('MetaSel ('Just "progDatas") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [DataDefn]) :*: (S1 ('MetaSel ('Just "progDefns") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Defn]) :*: S1 ('MetaSel ('Just "progTop") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id)))) | |||||