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

ReWire.Eidos.Syntax

Description

The abstract syntax of Eidos, the typed functional IR between GHC Core and the machine level (a system-F-lite mirror of GHC Core, specified in doc/eidos.md). The machine level's process calculus lives in ReWire.Synolon.Syntax, which embeds these expression types. Conventions the rest of the compiler relies on:

  • Binders are globally unique (Uniq): every binding site in a program carries a distinct unique, established by the bridge and preserved by every pass (duplication goes through a refreshing clone). Id equality and hashing are by unique only.
  • Types are plain data (no binders): Ty has no forall; quantification appears only in Sig, as a plain type-variable list. Every binder carries its full signature, so typeOf is total and synthesizing.
  • There is no term equality instance: comparing terms for alpha equivalence is an explicit operation — canonical renumbering, as in ReWire.Eidos.Simplify's canonKey (through refreshExp) and ReWire.Eidos.ProcOpt's blockKey (its own dense renumbering) — never accidental structural comparison (which would be annotation- and unique-sensitive).
  • Annotations (Annote) are semantically inert and never compared.
Synopsis

Documentation

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.

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

monoSig :: Ty -> Sig Source #

A monomorphic signature.

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

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 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 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 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 Program Source #

A whole program: datatypes, definitions, and the designated device root.

Constructors

Program 

Fields

Instances

Instances details
NFData Program Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Methods

rnf :: Program -> () #

Data Program 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) -> 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.Eidos.Syntax

Associated Types

type Rep Program 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep Program = D1 ('MetaData "Program" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Program" 'PrefixI 'True) (S1 ('MetaSel ('Just "progDatas") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [DataDefn]) :*: (S1 ('MetaSel ('Just "progDefns") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Defn]) :*: S1 ('MetaSel ('Just "progTop") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id))))

Methods

from :: Program -> Rep Program x #

to :: Rep Program x -> Program #

Show Program Source # 
Instance details

Defined in ReWire.Eidos.Syntax

Pretty Program Source # 
Instance details

Defined in ReWire.Eidos.Pretty

Methods

pretty :: Program -> Doc ann #

prettyList :: [Program] -> Doc ann

type Rep Program Source # 
Instance details

Defined in ReWire.Eidos.Syntax

type Rep Program = D1 ('MetaData "Program" "ReWire.Eidos.Syntax" "rewire-frontend-2.8-6fn13RghMuk7zNqk4evZ4E" 'False) (C1 ('MetaCons "Program" 'PrefixI 'True) (S1 ('MetaSel ('Just "progDatas") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [DataDefn]) :*: (S1 ('MetaSel ('Just "progDefns") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Defn]) :*: S1 ('MetaSel ('Just "progTop") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Id))))