Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data M = M
- data TermSymbol a b = a :| b
- type family TermArg x :: *
- class TerminalStream m t i where
- 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))
- 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))
- class TermStaticVar t i where
- termStaticVar :: t -> Context i -> i -> Context i
- termStreamIndex :: t -> Context i -> i -> i
- data S4 a b c d = S4 !a !b !c !d
- data S5 a b c d e = S5 !a !b !c !d !e
- data S6 a b c d e f = 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
- toTerminalStream :: Element x e => Elm x e -> S5 (Elm x e) Z Z e e
- class TableStaticVar i where
- tableStaticVar :: Context i -> i -> Context i
- tableStreamIndex :: TblConstraint i -> Context i -> i -> i
Multi-dimensional extension
Terminates a multi-dimensional terminal symbol stack.
data TermSymbol a b Source
Terminal symbols are stacked together with a
tails and b
head.
a :| b infixl 2 |
type family TermArg x :: * Source
Extracts the type of a multi-dimensional terminal argument.
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.
terminalStream :: t -> Context i -> i -> Stream m (S5 s j j i i) -> Stream m (S6 s j j i i (TermArg t)) Source
Monad m => TerminalStream m M Z | |
Monad m => TerminalStream m M (Outside Z) | |
(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) |
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.
termStaticVar :: t -> Context i -> i -> Context i Source
termStreamIndex :: t -> Context i -> i -> i Source
TermStaticVar M Z | |
TermStaticVar Epsilon PointL | |
TermStaticVar Deletion PointL | |
TermStaticVar M (Outside Z) | |
TermStaticVar Epsilon (Outside PointL) | |
TermStaticVar Deletion (Outside PointL) | |
TermStaticVar (Chr r x) PointL | |
TermStaticVar (Strng v x) PointL | |
(TermStaticVar a (Outside is), TermStaticVar b (Outside i)) => TermStaticVar (TermSymbol a b) (Outside ((:.) is i)) | |
TermStaticVar (Chr r x) (Outside PointL) | |
(TermStaticVar a is, TermStaticVar b i) => TermStaticVar (TermSymbol a b) ((:.) is i) |
fromTerminalStream :: S6 (Elm ls i) Z Z i i (TermArg (TermSymbol a b)) -> Elm ((:!:) ls (TermSymbol a b)) i Source
class TableStaticVar i where Source
tableStaticVar :: Context i -> i -> Context i Source
tableStreamIndex :: TblConstraint i -> Context i -> i -> i Source
TableStaticVar PointL | |
TableStaticVar Z | |
TableStaticVar (Outside PointL) | |
TableStaticVar (Outside Z) | |
(TableStaticVar (Outside is), TableStaticVar (Outside i)) => TableStaticVar (Outside ((:.) is i)) | |
(TableStaticVar is, TableStaticVar i) => TableStaticVar ((:.) is i) |