ADPfusion-0.6.0.0: Efficient, high-level dynamic programming.

Safe HaskellNone
LanguageHaskell2010

ADP.Fusion.Core.SynVar.Recursive.Type

Synopsis

Documentation

data IRec c i x where Source #

A syntactic variable that does not memoize but simplify recurses. One needs to be somewhat careful when using this one. ITbl performs memoization to perform DP in polynomial time (roughly speaking). If the rules for an IRec are of a particular type, they will exponential running time. Things like X -> X X are, for example, rather bad. Rules of the type X -> Y, Y -> Z are ok, if Y is an IRec since we just continue on. The same holds for Y -> a Y. Basically, things are safe if there is only a (small) constant number of parses of an IRec synvar.

Constructors

IRec 

Fields

Instances
(Monad mB, IndexStream i, i ~ j, m ~ mB) => Axiom (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

type AxiomStream (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) :: Type Source #

type AxiomIx (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) :: Type Source #

Methods

axiom :: TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r]) -> AxiomStream (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) Source #

axiomAt :: TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r]) -> AxiomIx (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) -> AxiomStream (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) Source #

Element ls i => Element (ls :!: TwIRecBt c u x mF mB r) i Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

data Elm (ls :!: TwIRecBt c u x mF mB r) i :: Type Source #

type RecElm (ls :!: TwIRecBt c u x mF mB r) i :: Type Source #

type Arg (ls :!: TwIRecBt c u x mF mB r) :: Type Source #

Methods

getArg :: Elm (ls :!: TwIRecBt c u x mF mB r) i -> Arg (ls :!: TwIRecBt c u x mF mB r) Source #

getIdx :: Elm (ls :!: TwIRecBt c u x mF mB r) i -> RunningIndex i Source #

getElm :: Elm (ls :!: TwIRecBt c u x mF mB r) i -> RecElm (ls :!: TwIRecBt c u x mF mB r) i Source #

Element ls i => Element (ls :!: TwIRec m c u x) i Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

data Elm (ls :!: TwIRec m c u x) i :: Type Source #

type RecElm (ls :!: TwIRec m c u x) i :: Type Source #

type Arg (ls :!: TwIRec m c u x) :: Type Source #

Methods

getArg :: Elm (ls :!: TwIRec m c u x) i -> Arg (ls :!: TwIRec m c u x) Source #

getIdx :: Elm (ls :!: TwIRec m c u x) i -> RunningIndex i Source #

getElm :: Elm (ls :!: TwIRec m c u x) i -> RecElm (ls :!: TwIRec m c u x) i Source #

(Applicative mB, Monad mB, pos ~ (ps :. p), posLeft ~ LeftPosTy pos (TwIRecBt (cs :. c) (us :. u) x mF mB r) (is :. i), Element ls (is :. i), TableStaticVar (ps :. p) (cs :. c) (us :. u) (is :. i), AddIndexDense pos (Elm ls (is :. i)) (cs :. c) (us :. u) (is :. i), MkStream mB posLeft ls (is :. i)) => MkStream mB (ps :. p :: Type :. Type) (ls :!: TwIRecBt (cs :. c) (us :. u) x mF mB r) (is :. i) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Methods

mkStream :: Proxy (ps :. p) -> (ls :!: TwIRecBt (cs :. c) (us :. u) x mF mB r) -> Int# -> LimitType (is :. i) -> (is :. i) -> Stream mB (Elm (ls :!: TwIRecBt (cs :. c) (us :. u) x mF mB r) (is :. i)) Source #

(Functor m, Monad m, pos ~ (ps :. p), posLeft ~ LeftPosTy pos (TwIRec m (cs :. c) (us :. u) x) (is :. i), Element ls (is :. i), TableStaticVar (ps :. p) (cs :. c) (us :. u) (is :. i), AddIndexDense pos (Elm ls (is :. i)) (cs :. c) (us :. u) (is :. i), MkStream m posLeft ls (is :. i)) => MkStream m (ps :. p :: Type :. Type) (ls :!: TwIRec m (cs :. c) (us :. u) x) (is :. i) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Methods

mkStream :: Proxy (ps :. p) -> (ls :!: TwIRec m (cs :. c) (us :. u) x) -> Int# -> LimitType (is :. i) -> (is :. i) -> Stream m (Elm (ls :!: TwIRec m (cs :. c) (us :. u) x) (is :. i)) Source #

Build (TwIRec m c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

type Stack (TwIRec m c i x) :: Type Source #

Methods

build :: TwIRec m c i x -> Stack (TwIRec m c i x) Source #

(Monad m, IndexStream i) => Axiom (TwIRec m c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

type AxiomStream (TwIRec m c i x) :: Type Source #

type AxiomIx (TwIRec m c i x) :: Type Source #

Methods

axiom :: TwIRec m c i x -> AxiomStream (TwIRec m c i x) Source #

axiomAt :: TwIRec m c i x -> AxiomIx (TwIRec m c i x) -> AxiomStream (TwIRec m c i x) Source #

GenBacktrackTable (TwIRec mF c i x) mF mB Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

data Backtrack (TwIRec mF c i x) mF mB :: Type Source #

type BacktrackIndex (TwIRec mF c i x) :: Type Source #

Methods

toBacktrack :: TwIRec mF c i x -> (forall a. mF a -> mB a) -> Backtrack (TwIRec mF c i x) mF mB Source #

Build (TwIRecBt c i x mF mB r) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

Associated Types

type Stack (TwIRecBt c i x mF mB r) :: Type Source #

Methods

build :: TwIRecBt c i x mF mB r -> Stack (TwIRecBt c i x mF mB r) Source #

data Elm (ls :!: TwIRec m c u x) i Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

data Elm (ls :!: TwIRec m c u x) i = ElmIRec !x !(RunningIndex i) !(Elm ls i)
data Elm (ls :!: TwIRecBt c u x mF mB r) i Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

data Elm (ls :!: TwIRecBt c u x mF mB r) i = ElmBtIRec !x [r] !(RunningIndex i) !(Elm ls i)
type Arg (ls :!: TwIRec m c u x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type Arg (ls :!: TwIRec m c u x) = Arg ls :. x
type Arg (ls :!: TwIRecBt c u x mF mB r) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type Arg (ls :!: TwIRecBt c u x mF mB r) = Arg ls :. (x, [r])
type AxiomStream (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type AxiomStream (TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType j -> j -> m [r])) = mB [r]
type Stack (TwIRec m c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type Stack (TwIRec m c i x) = S :!: TwIRec m c i x
type AxiomStream (TwIRec m c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type AxiomStream (TwIRec m c i x) = m x
type BacktrackIndex (TwIRec mF c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type BacktrackIndex (TwIRec mF c i x) = i
type TermArg (TwIRec m c i x) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type TermArg (TwIRec m c i x) = x
data Backtrack (TwIRec mF c i x) mF mB Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

data Backtrack (TwIRec mF c i x) mF mB = BtIRec !c !(LimitType i) !(LimitType i -> i -> mB x)
type Stack (TwIRecBt c i x mF mB r) Source # 
Instance details

Defined in ADP.Fusion.Core.SynVar.Recursive.Type

type Stack (TwIRecBt c i x mF mB r) = S :!: TwIRecBt c i x mF mB r

type TwIRec (m :: * -> *) c i x = TW (IRec c i x) (LimitType i -> i -> m x) Source #

type TwIRecBt c i x mF mB r = TW (Backtrack (TwIRec mF c i x) mF mB) (LimitType i -> i -> mB [r]) Source #