rewire-frontend-2.8: A Haskell-to-Verilog/VHDL compiler, front end (GHC driver, Eidos, Synolon)
Safe HaskellSafe
LanguageHaskell2010

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

Documentation

data Ty Source #

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.

Instances

Instances details
NFData Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Ty -> () #

Data Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Ty -> c Ty #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Ty #

toConstr :: Ty -> Constr #

dataTypeOf :: Ty -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Ty) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Ty) #

gmapT :: (forall b. Data b => b -> b) -> Ty -> Ty #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Ty -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Ty -> r #

gmapQ :: (forall d. Data d => d -> u) -> Ty -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Ty -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Ty -> m Ty #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Ty -> m Ty #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Ty -> m Ty #

Generic Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Ty 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep Ty = D1 ('MetaData "Ty" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) ((C1 ('MetaCons "TyCon" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyConId)) :+: C1 ('MetaCons "TyApp" '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 Ty)))) :+: (C1 ('MetaCons "TyVarT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyVar)) :+: (C1 ('MetaCons "TyNat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Natural)) :+: C1 ('MetaCons "Arrow" '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 Ty))))))

Methods

from :: Ty -> Rep Ty x #

to :: Rep Ty x -> Ty #

Show Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Ty -> ShowS #

show :: Ty -> String #

showList :: [Ty] -> ShowS #

Eq Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: Ty -> Ty -> Bool #

(/=) :: Ty -> Ty -> Bool #

Hashable Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> Ty -> Int

hash :: Ty -> Int

Pretty Ty Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Ty -> Doc ann #

prettyList :: [Ty] -> Doc ann

Annotated Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

ann :: Ty -> Annote #

type Rep Ty Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep Ty = D1 ('MetaData "Ty" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) ((C1 ('MetaCons "TyCon" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyConId)) :+: C1 ('MetaCons "TyApp" '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 Ty)))) :+: (C1 ('MetaCons "TyVarT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TyVar)) :+: (C1 ('MetaCons "TyNat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Annote) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Natural)) :+: C1 ('MetaCons "Arrow" '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 Ty))))))

data Alt Source #

Case alternatives. The default alternative, if present, comes first (the Core convention); constructor alternatives bind their fields.

Constructors

Alt Annote !AltCon ![Id] !Exp 

Instances

Instances details
NFData Alt Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Alt -> () #

Data Alt Source # 
Instance details

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 #

toConstr :: Alt -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

from :: Alt -> Rep Alt x #

to :: Rep Alt x -> Alt #

Show Alt Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Alt -> ShowS #

show :: Alt -> String #

showList :: [Alt] -> ShowS #

Pretty Alt Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Alt -> Doc ann #

prettyList :: [Alt] -> Doc ann

type Rep Alt Source # 
Instance details

Defined in ReWire.Eidos.Syntax

data Exp Source #

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).

Instances

Instances details
NFData Exp Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Exp -> () #

Data Exp Source # 
Instance details

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 #

toConstr :: Exp -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Exp 
Instance details

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]))))))))

Methods

from :: Exp -> Rep Exp x #

to :: Rep Exp x -> Exp #

Show Exp Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Exp -> ShowS #

show :: Exp -> String #

showList :: [Exp] -> ShowS #

Pretty Exp Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Exp -> Doc ann #

prettyList :: [Exp] -> Doc ann

Annotated Exp Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

ann :: Exp -> Annote #

type Rep Exp Source # 
Instance details

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]))))))))

data Arg Source #

An application argument: a term or a type. Type arguments instantiate the head's signature variables in order; the specializer is driven by them.

Constructors

EArg !Exp 
TArg !Ty 

Instances

Instances details
NFData Arg Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Arg -> () #

Data Arg Source # 
Instance details

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 #

toConstr :: Arg -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Arg 
Instance details

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)))

Methods

from :: Arg -> Rep Arg x #

to :: Rep Arg x -> Arg #

Show Arg Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Arg -> ShowS #

show :: Arg -> String #

showList :: [Arg] -> ShowS #

Pretty Arg Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Arg -> Doc ann #

prettyList :: [Arg] -> Doc ann

type Rep Arg Source # 
Instance details

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)))

data Id Source #

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.

Constructors

Id 

Fields

Instances

Instances details
NFData Id Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Id -> () #

Data Id Source # 
Instance details

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 #

toConstr :: Id -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Id 
Instance details

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))))

Methods

from :: Id -> Rep Id x #

to :: Rep Id x -> Id #

Show Id Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Id -> ShowS #

show :: Id -> String #

showList :: [Id] -> ShowS #

Eq Id Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: Id -> Id -> Bool #

(/=) :: Id -> Id -> Bool #

Ord Id Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

compare :: Id -> Id -> Ordering #

(<) :: Id -> Id -> Bool #

(<=) :: Id -> Id -> Bool #

(>) :: Id -> Id -> Bool #

(>=) :: Id -> Id -> Bool #

max :: Id -> Id -> Id #

min :: Id -> Id -> Id #

Hashable Id Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> Id -> Int

hash :: Id -> Int

Pretty Id Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Id -> Doc ann #

prettyList :: [Id] -> Doc ann

type Rep Id Source # 
Instance details

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))))

data Kind Source #

Constructors

KStar 
KNat 
KFun !Kind !Kind 

Instances

Instances details
NFData Kind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Kind -> () #

Data Kind Source # 
Instance details

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 #

toConstr :: Kind -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Kind 
Instance details

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))))

Methods

from :: Kind -> Rep Kind x #

to :: Rep Kind x -> Kind #

Show Kind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Kind -> ShowS #

show :: Kind -> String #

showList :: [Kind] -> ShowS #

Eq Kind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: Kind -> Kind -> Bool #

(/=) :: Kind -> Kind -> Bool #

Ord Kind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

compare :: Kind -> Kind -> Ordering #

(<) :: Kind -> Kind -> Bool #

(<=) :: Kind -> Kind -> Bool #

(>) :: Kind -> Kind -> Bool #

(>=) :: Kind -> Kind -> Bool #

max :: Kind -> Kind -> Kind #

min :: Kind -> Kind -> Kind #

Hashable Kind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> Kind -> Int

hash :: Kind -> Int

Pretty Kind Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Kind -> Doc ann #

prettyList :: [Kind] -> Doc ann

type Rep Kind Source # 
Instance details

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))))

data AltCon Source #

Instances

Instances details
NFData AltCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: AltCon -> () #

Data AltCon Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep AltCon 
Instance details

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)))

Methods

from :: AltCon -> Rep AltCon x #

to :: Rep AltCon x -> AltCon #

Show AltCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Eq AltCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: AltCon -> AltCon -> Bool #

(/=) :: AltCon -> AltCon -> Bool #

Hashable AltCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> AltCon -> Int

hash :: AltCon -> Int

type Rep AltCon Source # 
Instance details

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)))

data TyVar Source #

A type variable: display text, unique, kind. Equality and hashing by unique only.

Constructors

TyVar 

Fields

Instances

Instances details
NFData TyVar Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: TyVar -> () #

Data TyVar Source # 
Instance details

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 #

toConstr :: TyVar -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep TyVar 
Instance details

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))))

Methods

from :: TyVar -> Rep TyVar x #

to :: Rep TyVar x -> TyVar #

Show TyVar Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> TyVar -> ShowS #

show :: TyVar -> String #

showList :: [TyVar] -> ShowS #

Eq TyVar Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: TyVar -> TyVar -> Bool #

(/=) :: TyVar -> TyVar -> Bool #

Ord TyVar Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

compare :: TyVar -> TyVar -> Ordering #

(<) :: TyVar -> TyVar -> Bool #

(<=) :: TyVar -> TyVar -> Bool #

(>) :: TyVar -> TyVar -> Bool #

(>=) :: TyVar -> TyVar -> Bool #

max :: TyVar -> TyVar -> TyVar #

min :: TyVar -> TyVar -> TyVar #

Hashable TyVar Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> TyVar -> Int

hash :: TyVar -> Int

Pretty TyVar Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: TyVar -> Doc ann #

prettyList :: [TyVar] -> Doc ann

type Rep TyVar Source # 
Instance details

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))))

data DefnAttr Source #

Constructors

Inline 
NoInline 

Instances

Instances details
NFData DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: DefnAttr -> () #

Data DefnAttr Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep DefnAttr 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep DefnAttr = D1 ('MetaData "DefnAttr" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Inline" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NoInline" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: DefnAttr -> Rep DefnAttr x #

to :: Rep DefnAttr x -> DefnAttr #

Show DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Eq DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Ord DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Hashable DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep DefnAttr Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep DefnAttr = D1 ('MetaData "DefnAttr" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Inline" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NoInline" 'PrefixI 'False) (U1 :: Type -> Type))

data DataCon Source #

Constructors

DataCon Annote !DataConId !Sig 

Instances

Instances details
NFData DataCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: DataCon -> () #

Data DataCon Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep DataCon 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

from :: DataCon -> Rep DataCon x #

to :: Rep DataCon x -> DataCon #

Show DataCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Pretty DataCon Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: DataCon -> Doc ann #

prettyList :: [DataCon] -> Doc ann

type Rep DataCon Source # 
Instance details

Defined in ReWire.Eidos.Syntax

data DataDefn Source #

A datatype declaration. Constructor signatures quantify the datatype's parameters: C :: forall as. t1 -> ... -> tk -> T as.

Constructors

DataDefn 

Instances

Instances details
NFData DataDefn Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: DataDefn -> () #

Data DataDefn Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep DataDefn 
Instance details

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]))))

Methods

from :: DataDefn -> Rep DataDefn x #

to :: Rep DataDefn x -> DataDefn #

Show DataDefn Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Pretty DataDefn Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: DataDefn -> Doc ann #

prettyList :: [DataDefn] -> Doc ann

type Rep DataDefn Source # 
Instance details

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]))))

data JoinId Source #

A join point name: an Id plus the number of value parameters every Jump to it must supply (jumps are saturated).

Constructors

JoinId 

Fields

Instances

Instances details
NFData JoinId Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: JoinId -> () #

Data JoinId Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep JoinId 
Instance details

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)))

Methods

from :: JoinId -> Rep JoinId x #

to :: Rep JoinId x -> JoinId #

Show JoinId Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Eq JoinId Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: JoinId -> JoinId -> Bool #

(/=) :: JoinId -> JoinId -> Bool #

Hashable JoinId Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> JoinId -> Int

hash :: JoinId -> Int

type Rep JoinId Source # 
Instance details

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)))

data Sig Source #

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.

Constructors

Sig 

Fields

Instances

Instances details
NFData Sig Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Sig -> () #

Data Sig Source # 
Instance details

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 #

toConstr :: Sig -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Sig 
Instance details

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)))

Methods

from :: Sig -> Rep Sig x #

to :: Rep Sig x -> Sig #

Show Sig Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Sig -> ShowS #

show :: Sig -> String #

showList :: [Sig] -> ShowS #

Eq Sig Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

(==) :: Sig -> Sig -> Bool #

(/=) :: Sig -> Sig -> Bool #

Hashable Sig Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

hashWithSalt :: Int -> Sig -> Int

hash :: Sig -> Int

Pretty Sig Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Sig -> Doc ann #

prettyList :: [Sig] -> Doc ann

type Rep Sig Source # 
Instance details

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)))

data Bind Source #

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.

Constructors

NonRec !Id !Exp 
Rec ![(Id, Exp)] 
Join !JoinId ![Id] !Exp 

Instances

Instances details
NFData Bind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Bind -> () #

Data Bind Source # 
Instance details

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 #

toConstr :: Bind -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

from :: Bind -> Rep Bind x #

to :: Rep Bind x -> Bind #

Show Bind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Bind -> ShowS #

show :: Bind -> String #

showList :: [Bind] -> ShowS #

Pretty Bind Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Bind -> Doc ann #

prettyList :: [Bind] -> Doc ann

type Rep Bind Source # 
Instance details

Defined in ReWire.Eidos.Syntax

data Defn Source #

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 

Instances

Instances details
NFData Defn Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Defn -> () #

Data Defn Source # 
Instance details

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 #

toConstr :: Defn -> Constr #

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep Defn 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

from :: Defn -> Rep Defn x #

to :: Rep Defn x -> Defn #

Show Defn Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

showsPrec :: Int -> Defn -> ShowS #

show :: Defn -> String #

showList :: [Defn] -> ShowS #

Pretty Defn Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Defn -> Doc ann #

prettyList :: [Defn] -> Doc ann

type Rep Defn Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Uniq = Int Source #

Binder uniques. Globally unique per program by construction (bridge) and by maintenance (every duplicating pass refreshes them).

type TyConId = Text Source #

Type constructor and data constructor names are stable global text (dotted, never shadowed); they carry no uniques.

monoSig :: Ty -> Sig Source #

A monomorphic signature.

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

Instances details
NFData SpecOrigin Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: SpecOrigin -> () #

Data SpecOrigin Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Eidos.Syntax

Associated Types

type Rep SpecOrigin 
Instance details

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)))
Show SpecOrigin Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Eq SpecOrigin Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Hashable SpecOrigin Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep SpecOrigin Source # 
Instance details

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)))

data Proc Source #

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

Instances details
NFData Proc Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Proc -> () #

Data Proc Source # 
Instance details

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 #

toConstr :: Proc -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Associated Types

type Rep Proc 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

from :: Proc -> Rep Proc x #

to :: Rep Proc x -> Proc #

Show Proc Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> Proc -> ShowS #

show :: Proc -> String #

showList :: [Proc] -> ShowS #

Pretty Proc Source # 
Instance details

Defined in ReWire.Synolon.Pretty

Methods

pretty :: Proc -> Doc ann #

prettyList :: [Proc] -> Doc ann

Annotated Proc Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: Proc -> Annote #

type Rep Proc Source # 
Instance details

Defined in ReWire.Synolon.Syntax

data Cell Source #

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 

Fields

Instances

Instances details
NFData Cell Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Cell -> () #

Data Cell Source # 
Instance details

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 #

toConstr :: Cell -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Associated Types

type Rep Cell 
Instance details

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)))))

Methods

from :: Cell -> Rep Cell x #

to :: Rep Cell x -> Cell #

Show Cell Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> Cell -> ShowS #

show :: Cell -> String #

showList :: [Cell] -> ShowS #

Annotated Cell Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: Cell -> Annote #

type Rep Cell Source # 
Instance details

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)))))

data Block Source #

A block: parameters (a pause target's last parameter is the resumed input, typed by the process input type), commands, and a terminator.

Constructors

Block 

Fields

Instances

Instances details
NFData Block Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Block -> () #

Data Block Source # 
Instance details

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 #

toConstr :: Block -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Associated Types

type Rep Block 
Instance details

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))))

Methods

from :: Block -> Rep Block x #

to :: Rep Block x -> Block #

Show Block Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> Block -> ShowS #

show :: Block -> String #

showList :: [Block] -> ShowS #

Pretty Block Source # 
Instance details

Defined in ReWire.Synolon.Pretty

Methods

pretty :: Block -> Doc ann #

prettyList :: [Block] -> Doc ann

Annotated Block Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: Block -> Annote #

type Rep Block Source # 
Instance details

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))))

data Cmd Source #

A command: a pure computation, a cell read, or a cell write.

Instances

Instances details
NFData Cmd Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Cmd -> () #

Data Cmd Source # 
Instance details

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 #

toConstr :: Cmd -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

from :: Cmd -> Rep Cmd x #

to :: Rep Cmd x -> Cmd #

Show Cmd Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> Cmd -> ShowS #

show :: Cmd -> String #

showList :: [Cmd] -> ShowS #

Annotated Cmd Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: Cmd -> Annote #

type Rep Cmd Source # 
Instance details

Defined in ReWire.Synolon.Syntax

data Term Source #

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

Instances details
NFData Term Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Term -> () #

Data Term Source # 
Instance details

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 #

toConstr :: Term -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Associated Types

type Rep Term 
Instance details

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])))))

Methods

from :: Term -> Rep Term x #

to :: Rep Term x -> Term #

Show Term Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> Term -> ShowS #

show :: Term -> String #

showList :: [Term] -> ShowS #

Annotated Term Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: Term -> Annote #

type Rep Term Source # 
Instance details

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])))))

data TAlt Source #

A terminator-case alternative (default first, as in an expression case).

Constructors

TAlt Annote !AltCon ![Id] !Term 

Instances

Instances details
NFData TAlt Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: TAlt -> () #

Data TAlt Source # 
Instance details

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 #

toConstr :: TAlt -> Constr #

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

from :: TAlt -> Rep TAlt x #

to :: Rep TAlt x -> TAlt #

Show TAlt Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

showsPrec :: Int -> TAlt -> ShowS #

show :: TAlt -> String #

showList :: [TAlt] -> ShowS #

Annotated TAlt Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

ann :: TAlt -> Annote #

type Rep TAlt Source # 
Instance details

Defined in ReWire.Synolon.Syntax

data Program Source #

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.

Constructors

Program 

Fields

Instances

Instances details
NFData Program Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Methods

rnf :: Program -> () #

Data Program Source # 
Instance details

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 # 
Instance details

Defined in ReWire.Synolon.Syntax

Associated Types

type Rep Program 
Instance details

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]))))

Methods

from :: Program -> Rep Program x #

to :: Rep Program x -> Program #

Show Program Source # 
Instance details

Defined in ReWire.Synolon.Syntax

Pretty Program Source # 
Instance details

Defined in ReWire.Synolon.Pretty

Methods

pretty :: Program -> Doc ann #

prettyList :: [Program] -> Doc ann

type Rep Program Source # 
Instance details

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.

haltSites :: Term -> [Annote] Source #

The locations of a terminator's halts.

mapTermTargets :: (Id -> [Exp] -> (Id, [Exp])) -> Term -> Term Source #

Rewrite the transfer targets (and their argument lists) of a terminator, leaving halts alone.