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

Safe HaskellNone
LanguageHaskell2010

ADP.Fusion.Base.Multi

Contents

Synopsis

Multi-dimensional extension

data M Source

Terminates a multi-dimensional terminal symbol stack.

Constructors

M 

data TermSymbol a b Source

Terminal symbols are stacked together with a tails and b head.

Constructors

a :| b infixl 2 

Instances

(Monad m, MkStream m ls i, Element ls i, TerminalStream m (TermSymbol a b) i, TermStaticVar (TermSymbol a b) i) => MkStream m ((:!:) ls (TermSymbol a b)) i 
(Monad m, TerminalStream m a (Outside is), (~) * (Context (Outside ((:.) is PointL))) ((:.) (Context (Outside is)) (OutsideContext Int))) => TerminalStream m (TermSymbol a (Chr r x)) (Outside ((:.) is PointL)) 
(Monad m, TerminalStream m a (Outside is)) => TerminalStream m (TermSymbol a Epsilon) (Outside ((:.) is PointL)) 
(Monad m, TerminalStream m a (Outside is)) => TerminalStream m (TermSymbol a Deletion) (Outside ((:.) is PointL)) 
(Monad m, TerminalStream m a is) => TerminalStream m (TermSymbol a (Chr r x)) ((:.) is PointL) 
(Monad m, TerminalStream m a is) => TerminalStream m (TermSymbol a Epsilon) ((:.) is PointL) 
(Monad m, TerminalStream m a is) => TerminalStream m (TermSymbol a Deletion) ((:.) is PointL) 
(Monad m, TerminalStream m a is) => TerminalStream m (TermSymbol a (Strng v x)) ((:.) is PointL) 
(Eq a, Eq b) => Eq (TermSymbol a b) 
(Show i, Show (TermArg (TermSymbol a b)), Show (Elm ls i)) => Show (Elm ((:!:) ls (TermSymbol a b)) i) 
(Show a, Show b) => Show (TermSymbol a b) 
Build (TermSymbol a b) 
Element ls i => Element ((:!:) ls (TermSymbol a b)) i 
(TermStaticVar a (Outside is), TermStaticVar b (Outside i)) => TermStaticVar (TermSymbol a b) (Outside ((:.) is i)) 
(TermStaticVar a is, TermStaticVar b i) => TermStaticVar (TermSymbol a b) ((:.) is i) 
type Stack (TermSymbol a b) = (:!:) S (TermSymbol a b) 
data Elm ((:!:) ls (TermSymbol a b)) = ElmTS !(TermArg (TermSymbol a b)) !i !i !(Elm ls i) 
type Arg ((:!:) ls (TermSymbol a b)) = (:.) (Arg ls) (TermArg (TermSymbol a b)) 
type TermArg (TermSymbol a (Chr r x)) = (:.) (TermArg a) r 
type TermArg (TermSymbol a (Edge e)) = (:.) (TermArg a) e 
type TermArg (TermSymbol a Epsilon) = (:.) (TermArg a) () 
type TermArg (TermSymbol a Deletion) = (:.) (TermArg a) () 
type TermArg (TermSymbol a (PeekIndex i)) = (:.) (TermArg a) (PeekIndex i) 
type TermArg (TermSymbol a (Strng v x)) = (:.) (TermArg a) (v x) 

type family TermArg x :: * Source

Extracts the type of a multi-dimensional terminal argument.

Instances

type TermArg M = Z 
type TermArg (TermSymbol a (Chr r x)) = (:.) (TermArg a) r 
type TermArg (TermSymbol a (Edge e)) = (:.) (TermArg a) e 
type TermArg (TermSymbol a Epsilon) = (:.) (TermArg a) () 
type TermArg (TermSymbol a Deletion) = (:.) (TermArg a) () 
type TermArg (TermSymbol a (PeekIndex i)) = (:.) (TermArg a) (PeekIndex i) 
type TermArg (TermSymbol a (Strng v x)) = (:.) (TermArg a) (v x) 

class TerminalStream m t i where Source

Handles each individual argument within a stack of terminal symbols.

Methods

terminalStream :: t -> Context i -> i -> Stream m (S5 s j j i i) -> Stream m (S6 s j j i i (TermArg t)) Source

iPackTerminalStream :: (TerminalStream m t1 i, Monad m) => t1 -> Context i -> (:.) i t -> Stream m (S5 s a a ((:.) i b) ((:.) i b)) -> Stream m (S6 s ((:.) a b) ((:.) a b) i i (TermArg t1)) Source

oPackTerminalStream :: (TerminalStream m t1 (Outside z), Monad m) => t1 -> Context (Outside z) -> Outside ((:.) z t) -> Stream m (S5 s a a (Outside ((:.) z b)) (Outside ((:.) z b))) -> Stream m (S6 s ((:.) a b) ((:.) a b) (Outside z) (Outside z) (TermArg t1)) Source

class TermStaticVar t i where Source

For multi-dimensional terminals we need to be able to calculate how the static/variable signal changes and if the index for the inner part needs to be modified.

Methods

termStaticVar :: t -> Context i -> i -> Context i Source

termStreamIndex :: t -> Context i -> i -> i Source

data S4 a b c d Source

Constructors

S4 !a !b !c !d 

data S5 a b c d e Source

Constructors

S5 !a !b !c !d !e 

data S6 a b c d e f Source

Constructors

S6 !a !b !c !d !e !f 

fromTerminalStream :: S6 (Elm ls i) Z Z i i (TermArg (TermSymbol a b)) -> Elm ((:!:) ls (TermSymbol a b)) i Source

toTerminalStream :: Element x e => Elm x e -> S5 (Elm x e) Z Z e e Source