| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
ReWire.Synolon.Syntax
Contents
Description
The abstract syntax of Synolon, the machine-level IR between Eidos and
Hyle (doc/synolon.md): the
process calculus — state cells, labeled blocks with commands, and
pausegotohalt terminators — over the Eidos expression language,
which this module re-exports: command right-hand sides, cell initials,
and terminator operands are Eidos expressions, and the pure
definitions a machine calls are Eidos definitions. Only the process
constructs and the program are new; the conventions of
ReWire.Eidos.Syntax (unique-keyed names, inert annotations, no term
equality) carry over unchanged.
Synopsis
- data Ty
- data Alt = Alt Annote !AltCon ![Id] !Exp
- data Exp
- data Arg
- data Id = Id {}
- data Kind
- data AltCon
- = DataAlt !DataConId
- | LitAlt !Integer
- | DefaultAlt
- data TyVar = TyVar {}
- data DefnAttr
- data DataCon = DataCon Annote !DataConId !Sig
- data DataDefn = DataDefn {}
- data JoinId = JoinId {}
- data Sig = Sig {}
- data Bind
- data Defn = Defn {
- defnAnnote :: Annote
- defnId :: !Id
- defnParams :: ![Id]
- defnBody :: !Exp
- defnAttr :: !(Maybe DefnAttr)
- defnOrigin :: !(Maybe SpecOrigin)
- type Uniq = Int
- type TyConId = Text
- type DataConId = Text
- monoSig :: Ty -> Sig
- data SpecOrigin
- = SpecOrigin {
- originName :: !Text
- originArgs :: ![Ty]
- | BakeOrigin !Text
- = SpecOrigin {
- data Proc = Proc {}
- data Cell = Cell {}
- data Block = Block {}
- data Cmd
- data Term
- data TAlt = TAlt Annote !AltCon ![Id] !Term
- data Program = Program {}
- allBlocks :: Proc -> [Block]
- blockExps :: Block -> [Exp]
- cmdExps :: Cmd -> [Exp]
- termExps :: Term -> [Exp]
- cmdBinders :: Block -> [Id]
- termTargets :: Term -> [Id]
- pauseTargets :: Term -> [Id]
- haltSites :: Term -> [Annote]
- mapTermTargets :: (Id -> [Exp] -> (Id, [Exp])) -> Term -> Term
Documentation
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
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)))) | |||||
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))) | |||||
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)))) | |||||
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)))) | |||||
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 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)))) | |||||
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 # | |
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 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])))) | |||||
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))) | |||||
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))) | |||||
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))))) | |||||
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)))))) | |||||
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.
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 process (docsynolon.md §3.4): inputoutput types, an optional clock
name, named state cells (one per retired state layer), the reset
block (entry: parameterless, implicitly labeled), and labeled
blocks. Cell and process names are their own (Text) namespaces;
labels are Ids in the binder-unique discipline.
Constructors
| Proc | |
Instances
| NFData Proc Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Proc Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Proc -> c Proc # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Proc # dataTypeOf :: Proc -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Proc) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Proc) # gmapT :: (forall b. Data b => b -> b) -> Proc -> Proc # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Proc -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Proc -> r # gmapQ :: (forall d. Data d => d -> u) -> Proc -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Proc -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Proc -> m Proc # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Proc -> m Proc # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Proc -> m Proc # | |||||
| Generic Proc Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show Proc Source # | |||||
| Pretty Proc Source # | |||||
Defined in ReWire.Synolon.Pretty | |||||
| Annotated Proc Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep Proc Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Proc = D1 ('MetaData "Proc" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Proc" 'PrefixI 'True) (((S1 ('MetaSel ('Just "procAnnote") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Just "procName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "procInTy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Just "procOutTy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty))) :*: ((S1 ('MetaSel ('Just "procClock") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "procCells") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Cell])) :*: (S1 ('MetaSel ('Just "procEntry") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Block) :*: S1 ('MetaSel ('Just "procBlocks") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [(Id, Block)]))))) | |||||
A state cell: name, type, and initial value — a closed pure
expression evaluated at compile time, or Nothing (undef) for a
cell first written before any read on every path from entry.
Constructors
| Cell | |
Instances
| NFData Cell Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Cell Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Cell -> c Cell # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Cell # dataTypeOf :: Cell -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Cell) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cell) # gmapT :: (forall b. Data b => b -> b) -> Cell -> Cell # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cell -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cell -> r # gmapQ :: (forall d. Data d => d -> u) -> Cell -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Cell -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Cell -> m Cell # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Cell -> m Cell # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Cell -> m Cell # | |||||
| Generic Cell Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show Cell Source # | |||||
| Annotated Cell Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep Cell Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Cell = D1 ('MetaData "Cell" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Cell" 'PrefixI 'True) ((S1 ('MetaSel ('Just "cellAnnote") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Just "cellName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "cellTy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Ty) :*: S1 ('MetaSel ('Just "cellInit") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe Exp))))) | |||||
A block: parameters (a pause target's last parameter is the resumed input, typed by the process input type), commands, and a terminator.
Instances
| NFData Block Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Block Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Block -> c Block # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Block # dataTypeOf :: Block -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Block) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Block) # gmapT :: (forall b. Data b => b -> b) -> Block -> Block # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Block -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Block -> r # gmapQ :: (forall d. Data d => d -> u) -> Block -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Block -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Block -> m Block # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Block -> m Block # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Block -> m Block # | |||||
| Generic Block Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show Block Source # | |||||
| Pretty Block Source # | |||||
Defined in ReWire.Synolon.Pretty | |||||
| Annotated Block Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep Block Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Block = D1 ('MetaData "Block" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Block" 'PrefixI 'True) ((S1 ('MetaSel ('Just "blkAnnote") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Just "blkParams") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Id])) :*: (S1 ('MetaSel ('Just "blkCmds") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Cmd]) :*: S1 ('MetaSel ('Just "blkTerm") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Term)))) | |||||
A command: a pure computation, a cell read, or a cell write.
Instances
| NFData Cmd Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Cmd Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Cmd -> c Cmd # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Cmd # dataTypeOf :: Cmd -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Cmd) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cmd) # gmapT :: (forall b. Data b => b -> b) -> Cmd -> Cmd # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cmd -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cmd -> r # gmapQ :: (forall d. Data d => d -> u) -> Cmd -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Cmd -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Cmd -> m Cmd # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Cmd -> m Cmd # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Cmd -> m Cmd # | |||||
| Generic Cmd Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show Cmd Source # | |||||
| Annotated Cmd Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep Cmd Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Cmd = D1 ('MetaData "Cmd" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "CmdBind" '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 "CmdGet" '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 Text))) :+: C1 ('MetaCons "CmdPut" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp))))) | |||||
A block terminator (doc/synolon.md §3.4). A pause supplies all of
its target's parameters except the last (the resumed input, supplied
by the machine); a goto supplies all of them.
Constructors
| Pause Annote !Exp !Id ![Exp] | |
| Goto Annote !Id ![Exp] | |
| Halt Annote !Exp | |
| TCase Annote !Exp ![TAlt] |
Instances
| NFData Term Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Term Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Term -> c Term # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Term # dataTypeOf :: Term -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Term) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Term) # gmapT :: (forall b. Data b => b -> b) -> Term -> Term # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Term -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Term -> r # gmapQ :: (forall d. Data d => d -> u) -> Term -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Term -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Term -> m Term # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Term -> m Term # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Term -> m Term # | |||||
| Generic Term Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show Term Source # | |||||
| Annotated Term Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep Term Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Term = D1 ('MetaData "Term" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) ((C1 ('MetaCons "Pause" '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 Id) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Exp]))) :+: C1 ('MetaCons "Goto" '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 "Halt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Exp)) :+: C1 ('MetaCons "TCase" '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 [TAlt]))))) | |||||
A terminator-case alternative (default first, as in an expression case).
Instances
| NFData TAlt Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data TAlt Source # | |||||
Defined in ReWire.Synolon.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TAlt -> c TAlt # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c TAlt # dataTypeOf :: TAlt -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c TAlt) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TAlt) # gmapT :: (forall b. Data b => b -> b) -> TAlt -> TAlt # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> TAlt -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> TAlt -> r # gmapQ :: (forall d. Data d => d -> u) -> TAlt -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> TAlt -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> TAlt -> m TAlt # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TAlt -> m TAlt # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TAlt -> m TAlt # | |||||
| Generic TAlt Source # | |||||
Defined in ReWire.Synolon.Syntax Associated Types
| |||||
| Show TAlt Source # | |||||
| Annotated TAlt Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| type Rep TAlt Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep TAlt = D1 ('MetaData "TAlt" "ReWire.Synolon.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "TAlt" '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 Term)))) | |||||
A whole program: datatypes, the definitions the machine calls (pure,
monomorphic, first-order — machineDefn), and the
processes, which are its roots. There is no top: purification
consumed the device root into the process.
Instances
| NFData Program Source # | |||||
Defined in ReWire.Synolon.Syntax | |||||
| Data Program Source # | |||||
Defined in ReWire.Synolon.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.Synolon.Syntax Associated Types
| |||||
| Show Program Source # | |||||
| Pretty Program Source # | |||||
Defined in ReWire.Synolon.Pretty | |||||
| type Rep Program Source # | |||||
Defined in ReWire.Synolon.Syntax type Rep Program = D1 ('MetaData "Program" "ReWire.Synolon.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 "progProcs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Proc])))) | |||||
Traversals
allBlocks :: Proc -> [Block] Source #
Every block of a process, the entry block first (paired with no label).
blockExps :: Block -> [Exp] Source #
The expressions a block holds: command right-hand sides and put payloads, then the terminator's operands.
termExps :: Term -> [Exp] Source #
A terminator's operands: the pause output and arguments, goto arguments, the halt answer, and (recursively) a terminator case's scrutinee and alternatives.
cmdBinders :: Block -> [Id] Source #
The binders a block's commands introduce (in order).
termTargets :: Term -> [Id] Source #
The labels a terminator transfers to (by pause or goto).
pauseTargets :: Term -> [Id] Source #
The labels a terminator pauses to: the machine states.