grammar-combinators-0.2.3: A parsing library of context-free grammar combinators.

Text.GrammarCombinators.Base.Domain

Synopsis

Documentation

class DomainMap phi phi' supIxT whereSource

Methods

supIx :: phi' ix -> phi (supIxT ix)Source

subIx :: phi (supIxT ix) -> phi' ixSource

Instances

DomainMap (PackratDomain phi) phi PRBaseIx 
DomainMap (FoldLoopsDomain phi) phi FLManyIx 
DomainMap (FoldLoopsDomain phi) phi FLBaseIx 
DomainMap (UPDomain phi) phi UPTailIx 
DomainMap (UPDomain phi) phi UPHeadIx 
DomainMap (UPDomain phi) phi UPBaseIx 
DomainMap (LCDomain phi t) phi LCBaseIx 

class DomainMap phi phi' supIxT => DomainEmbedding phi phi' supIxT whereSource

Methods

supPF :: HFunctor phi (PF phi) => phi' ix -> phi (supIxT ix) -> PF phi' (SubVal supIxT r) ix -> PF phi r (supIxT ix)Source

data SubVal supIxT v ix Source

A generic wrapper type that restricts a semantic value family over a bigger domain to a smaller domain.

Constructors

MkSubVal 

Fields

unSubVal :: v (supIxT ix)
 

Instances

Show (v (supIxT ix)) => Show (SubVal supIxT v ix) 
Lift (v (supIxT ix)) => Lift (SubVal supIxT v ix) 

data IxMapSeq l1 l2 Source

type family ApplyIxMap m ix Source

class MemoFam phi whereSource

Associated Types

data Memo phi :: (* -> *) -> *Source

Methods

fromMemo :: Memo phi v -> forall ix. phi ix -> v ixSource

toMemo :: (forall ix. phi ix -> v ix) -> Memo phi vSource

Instances

MemoFam NumericDomain 
MemoFam phi => MemoFam (PackratDomain phi) 
MemoFam phi => MemoFam (FoldLoopsDomain phi) 
MemoFam phi => MemoFam (UPDomain phi) 
(MemoFam phiL, MemoFam phiR) => MemoFam (MergeDomain phiL phiR) 
(MemoFam phi, Token t) => MemoFam (LCDomain phi t) 

memoFamily :: MemoFam phi => (forall ix. phi ix -> v ix) -> forall ix. phi ix -> v ixSource

class FoldFam phi whereSource

A domain phi that is an instance of the FoldFam type class supports folding over all non-terminals in the domain using the foldFam function.

Methods

foldFam :: (forall ix. phi ix -> b -> b) -> b -> bSource

Fold a given function over all non-terminals in the domain phi.

Instances

FoldFam NumericDomain 
FoldFam phi => FoldFam (FoldLoopsDomain phi) 
FoldFam phi => FoldFam (UPDomain phi) 
(FoldFam phiL, FoldFam phiR) => FoldFam (MergeDomain phiL phiR) 
(Token t, FoldFam phi) => FoldFam (LCDomain phi t) 

class EqFam phi whereSource

A domain phi that is an instance of the EqFam type class supports overriding a function over the full domain at a single non-terminal using the |overrideIdx| function.

Methods

eqIdx :: forall ix1 ix2. phi ix1 -> phi ix2 -> BoolSource

Test equality of two given non-terminal proof terms.

overrideIdx :: (forall ix'. phi ix' -> r ix') -> phi oix -> r oix -> phi ix -> r ixSource

Override a function over the full domain at a single non-terminal.

Instances

EqFam NumericDomain 
EqFam phi => EqFam (FoldLoopsDomain phi) 
EqFam phi => EqFam (UPDomain phi) 
(EqFam phiL, EqFam phiR) => EqFam (MergeDomain phiL phiR) 
(EqFam phi, Token t) => EqFam (LCDomain phi t) 

overrideIdxK :: EqFam phi => (forall ix'. phi ix' -> v) -> phi oix -> v -> phi ix -> vSource

Similar to the overrideIdx function, but limited to functions whose result type is the same for all non-terminals.

class ShowFam phi whereSource

A domain phi that is an instance of the ShowFam type class supports conversion of non-terminal proof terms to Strings using the showIdx function.

Methods

showIdx :: forall ix. phi ix -> StringSource

Convert a given non-terminal proof term to a String representation.

Instances

ShowFam NumericDomain 
ShowFam phi => ShowFam (FoldLoopsDomain phi) 
ShowFam phi => ShowFam (UPDomain phi) 
(ShowFam phiL, ShowFam phiR) => ShowFam (MergeDomain phiL phiR) 
(ShowFam phi, Show t) => ShowFam (LCDomain phi t) 

class (FoldFam phi, ShowFam phi, EqFam phi, MemoFam phi) => Domain phi Source

A decent Domain phi should instantiate the FoldFam, ShowFam, EqFam and MemoFam. Avoid using this type class in constraints, use more specific type classes whenever possible.

Note: instances for this type class are not automatically derived, and you have to manually instantiate it with an empty implementation block.

Instances

Domain NumericDomain 
Domain phi => Domain (FoldLoopsDomain phi) 
Domain phi => Domain (UPDomain phi) 
(Domain phiL, Domain phiR) => Domain (MergeDomain phiL phiR) 
(Domain phi, Token t) => Domain (LCDomain phi t) 

memoFamilyK :: MemoFam phi => (forall ix. phi ix -> v) -> forall ix. phi ix -> vSource

toMemoK :: MemoFam phi => (forall ix. phi ix -> v) -> Memo phi (K0 v)Source

fromMemoK :: MemoFam phi => Memo phi (K0 v) -> phi ix -> vSource

class LiftFam phi whereSource

Methods

liftIdxE :: phi ix -> ExpSource

liftIdxP :: phi ix -> PatSource

Instances

LiftFam phi => LiftFam (UPDomain phi) 

data LeftIx ix Source

Instances

Show (rL ix) => Show (EitherFunctor rL rR (LeftIx ix)) 

data RightIx ix Source

Instances

Show (rR ix) => Show (EitherFunctor rL rR (RightIx ix)) 

data MergeDomain phiL phiR ix whereSource

Constructors

LeftIdx :: phiL ix -> MergeDomain phiL phiR (LeftIx ix) 
RightIdx :: phiR ix -> MergeDomain phiL phiR (RightIx ix) 

Instances

(MemoFam phiL, MemoFam phiR) => MemoFam (MergeDomain phiL phiR) 
(FoldFam phiL, FoldFam phiR) => FoldFam (MergeDomain phiL phiR) 
(ShowFam phiL, ShowFam phiR) => ShowFam (MergeDomain phiL phiR) 
(EqFam phiL, EqFam phiR) => EqFam (MergeDomain phiL phiR) 
(Domain phiL, Domain phiR) => Domain (MergeDomain phiL phiR) 
(EpsProductionRule p, ProductionRule p, LoopProductionRule p (MergeDomain phiL phiR) (EitherFunctor rL rR)) => LoopProductionRule (IGW p phiL phiR rL rR t) (MergeDomain phiR phiL) (EitherFunctor rR rL) 
(EpsProductionRule p, ProductionRule p, RecProductionRule p (MergeDomain phiL phiR) (EitherFunctor rL rR)) => RecProductionRule (IGW p phiL phiR rL rR t) (MergeDomain phiR phiL) (EitherFunctor rR rL) 

data EitherFunctor rL rR ix whereSource

Constructors

LeftR :: rL ix -> EitherFunctor rL rR (LeftIx ix) 
RightR :: rR ix -> EitherFunctor rL rR (RightIx ix) 

Instances

Show (rR ix) => Show (EitherFunctor rL rR (RightIx ix)) 
Show (rL ix) => Show (EitherFunctor rL rR (LeftIx ix)) 
(EpsProductionRule p, ProductionRule p, LoopProductionRule p (MergeDomain phiL phiR) (EitherFunctor rL rR)) => LoopProductionRule (IGW p phiL phiR rL rR t) (MergeDomain phiR phiL) (EitherFunctor rR rL) 
(EpsProductionRule p, ProductionRule p, RecProductionRule p (MergeDomain phiL phiR) (EitherFunctor rL rR)) => RecProductionRule (IGW p phiL phiR rL rR t) (MergeDomain phiR phiL) (EitherFunctor rR rL) 

unLeftR :: EitherFunctor rL rR (LeftIx ix) -> rL ixSource

unRightR :: EitherFunctor rL rR (RightIx ix) -> rR ixSource