module ForSyDe.Shallow.MoC.CSDF (
delayCSDF,
actor11CSDF, actor12CSDF, actor13CSDF, actor14CSDF,
actor21CSDF, actor22CSDF, actor23CSDF, actor24CSDF,
actor31CSDF, actor32CSDF, actor33CSDF, actor34CSDF,
actor41CSDF, actor42CSDF, actor43CSDF, actor44CSDF
) where
import ForSyDe.Shallow.Core
delayCSDF :: [a] -> Signal a -> Signal a
delayCSDF :: [a] -> Signal a -> Signal a
delayCSDF [a]
initial_tokens Signal a
xs = [a] -> Signal a
forall a. [a] -> Signal a
signal [a]
initial_tokens Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
xs
actor11CSDF :: [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
actor11CSDF :: [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
actor11CSDF = [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
forall a b. [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF
actor21CSDF :: [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
actor21CSDF :: [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
actor21CSDF = [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
forall a b c.
[((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF
actor31CSDF :: [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
actor31CSDF :: [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
actor31CSDF = [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF
actor41CSDF :: [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
actor41CSDF :: [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
actor41CSDF = [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
forall a b c d e.
[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF
actor12CSDF :: [(Int, (Int, Int), [a] -> ([b], [c]))]
-> Signal a -> (Signal b, Signal c)
actor12CSDF :: [(Int, (Int, Int), [a] -> ([b], [c]))]
-> Signal a -> (Signal b, Signal c)
actor12CSDF [(Int, (Int, Int), [a] -> ([b], [c]))]
s Signal a
xs = [(Int, Int)] -> Signal ([b], [c]) -> (Signal b, Signal c)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF ([(Int, (Int, Int), [a] -> ([b], [c]))] -> [(Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [(Int, (Int, Int), [a] -> ([b], [c]))]
s) (Signal ([b], [c]) -> (Signal b, Signal c))
-> Signal ([b], [c]) -> (Signal b, Signal c)
forall a b. (a -> b) -> a -> b
$ [(Int, Int, [a] -> [([b], [c])])] -> Signal a -> Signal ([b], [c])
forall a b. [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF ([(Int, (Int, Int), [a] -> ([b], [c]))]
-> [(Int, Int, [a] -> [([b], [c])])]
forall it ot a y. [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n [(Int, (Int, Int), [a] -> ([b], [c]))]
s) Signal a
xs
actor22CSDF :: [((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
-> Signal a -> Signal b -> (Signal c, Signal d)
actor22CSDF :: [((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
-> Signal a -> Signal b -> (Signal c, Signal d)
actor22CSDF [((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
s Signal a
xs Signal b
ys = [(Int, Int)] -> Signal ([c], [d]) -> (Signal c, Signal d)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF ([((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
-> [(Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
s) (Signal ([c], [d]) -> (Signal c, Signal d))
-> Signal ([c], [d]) -> (Signal c, Signal d)
forall a b. (a -> b) -> a -> b
$ [((Int, Int), Int, [a] -> [b] -> [([c], [d])])]
-> Signal a -> Signal b -> Signal ([c], [d])
forall a b c.
[((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF ([((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
-> [((Int, Int), Int, [a] -> [b] -> [([c], [d])])]
forall it ot a b y.
[(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n [((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))]
s) Signal a
xs Signal b
ys
actor32CSDF :: [((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
-> Signal a -> Signal b -> Signal c -> (Signal d, Signal e)
actor32CSDF :: [((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
-> Signal a -> Signal b -> Signal c -> (Signal d, Signal e)
actor32CSDF [((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
s Signal a
as Signal b
bs Signal c
cs
= [(Int, Int)] -> Signal ([d], [e]) -> (Signal d, Signal e)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF ([((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
-> [(Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
s) (Signal ([d], [e]) -> (Signal d, Signal e))
-> Signal ([d], [e]) -> (Signal d, Signal e)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e])])]
-> Signal a -> Signal b -> Signal c -> Signal ([d], [e])
forall a b c d.
[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF ([((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
-> [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e])])]
forall it ot a b c y.
[(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n [((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))]
s) Signal a
as Signal b
bs Signal c
cs
actor42CSDF :: [((Int, Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> [d] -> ([e], [f]))]
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal e, Signal f)
actor42CSDF :: [((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal e, Signal f)
actor42CSDF [((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
s Signal a
as Signal b
bs Signal c
cs Signal d
ds
= [(Int, Int)] -> Signal ([e], [f]) -> (Signal e, Signal f)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF ([((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
-> [(Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
s) (Signal ([e], [f]) -> (Signal e, Signal f))
-> Signal ([e], [f]) -> (Signal e, Signal f)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f])])]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal ([e], [f])
forall a b c d e.
[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF ([((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
-> [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f])])]
forall it ot a b c d y.
[(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n [((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))]
s) Signal a
as Signal b
bs Signal c
cs Signal d
ds
actor13CSDF :: [(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
-> Signal a -> (Signal b, Signal c, Signal d)
actor13CSDF :: [(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
-> Signal a -> (Signal b, Signal c, Signal d)
actor13CSDF [(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
s Signal a
xs = [(Int, Int, Int)]
-> Signal ([b], [c], [d]) -> (Signal b, Signal c, Signal d)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF ([(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
-> [(Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
s) (Signal ([b], [c], [d]) -> (Signal b, Signal c, Signal d))
-> Signal ([b], [c], [d]) -> (Signal b, Signal c, Signal d)
forall a b. (a -> b) -> a -> b
$ [(Int, Int, [a] -> [([b], [c], [d])])]
-> Signal a -> Signal ([b], [c], [d])
forall a b. [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF ([(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
-> [(Int, Int, [a] -> [([b], [c], [d])])]
forall it ot a y. [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n [(Int, (Int, Int, Int), [a] -> ([b], [c], [d]))]
s) Signal a
xs
actor23CSDF :: [((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
-> Signal a -> Signal b -> (Signal c, Signal d, Signal e)
actor23CSDF :: [((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
-> Signal a -> Signal b -> (Signal c, Signal d, Signal e)
actor23CSDF [((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
s Signal a
xs Signal b
ys
= [(Int, Int, Int)]
-> Signal ([c], [d], [e]) -> (Signal c, Signal d, Signal e)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF ([((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
-> [(Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
s) (Signal ([c], [d], [e]) -> (Signal c, Signal d, Signal e))
-> Signal ([c], [d], [e]) -> (Signal c, Signal d, Signal e)
forall a b. (a -> b) -> a -> b
$ [((Int, Int), Int, [a] -> [b] -> [([c], [d], [e])])]
-> Signal a -> Signal b -> Signal ([c], [d], [e])
forall a b c.
[((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF ([((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
-> [((Int, Int), Int, [a] -> [b] -> [([c], [d], [e])])]
forall it ot a b y.
[(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n [((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))]
s) Signal a
xs Signal b
ys
actor33CSDF :: [((Int, Int, Int), (Int, Int, Int), [a] -> [b] -> [c] -> ([d], [e], [f]))]
-> Signal a -> Signal b -> Signal c -> (Signal d, Signal e, Signal f)
actor33CSDF :: [((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
-> Signal a
-> Signal b
-> Signal c
-> (Signal d, Signal e, Signal f)
actor33CSDF [((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
s Signal a
as Signal b
bs Signal c
cs
= [(Int, Int, Int)]
-> Signal ([d], [e], [f]) -> (Signal d, Signal e, Signal f)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF ([((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
-> [(Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
s) (Signal ([d], [e], [f]) -> (Signal d, Signal e, Signal f))
-> Signal ([d], [e], [f]) -> (Signal d, Signal e, Signal f)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e], [f])])]
-> Signal a -> Signal b -> Signal c -> Signal ([d], [e], [f])
forall a b c d.
[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF ([((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
-> [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e], [f])])]
forall it ot a b c y.
[(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n [((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))]
s) Signal a
as Signal b
bs Signal c
cs
actor43CSDF :: [((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal e, Signal f, Signal g)
actor43CSDF :: [((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal e, Signal f, Signal g)
actor43CSDF [((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
s Signal a
as Signal b
bs Signal c
cs Signal d
ds
= [(Int, Int, Int)]
-> Signal ([e], [f], [g]) -> (Signal e, Signal f, Signal g)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF ([((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
-> [(Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
s) (Signal ([e], [f], [g]) -> (Signal e, Signal f, Signal g))
-> Signal ([e], [f], [g]) -> (Signal e, Signal f, Signal g)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g])])]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal ([e], [f], [g])
forall a b c d e.
[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF ([((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
-> [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g])])]
forall it ot a b c d y.
[(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n [((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))]
s) Signal a
as Signal b
bs Signal c
cs Signal d
ds
actor14CSDF :: [(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
-> Signal a -> (Signal b, Signal c, Signal d, Signal e)
actor14CSDF :: [(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
-> Signal a -> (Signal b, Signal c, Signal d, Signal e)
actor14CSDF [(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
s Signal a
xs = [(Int, Int, Int, Int)]
-> Signal ([b], [c], [d], [e])
-> (Signal b, Signal c, Signal d, Signal e)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF ([(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
-> [(Int, Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
s) (Signal ([b], [c], [d], [e])
-> (Signal b, Signal c, Signal d, Signal e))
-> Signal ([b], [c], [d], [e])
-> (Signal b, Signal c, Signal d, Signal e)
forall a b. (a -> b) -> a -> b
$ [(Int, Int, [a] -> [([b], [c], [d], [e])])]
-> Signal a -> Signal ([b], [c], [d], [e])
forall a b. [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF ([(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
-> [(Int, Int, [a] -> [([b], [c], [d], [e])])]
forall it ot a y. [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n [(Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))]
s) Signal a
xs
actor24CSDF :: [((Int, Int), (Int, Int, Int, Int), [a] -> [b] -> ([c], [d], [e], [f]))]
-> Signal a -> Signal b
-> (Signal c, Signal d, Signal e, Signal f)
actor24CSDF :: [((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
-> Signal a -> Signal b -> (Signal c, Signal d, Signal e, Signal f)
actor24CSDF [((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
s Signal a
xs Signal b
ys
= [(Int, Int, Int, Int)]
-> Signal ([c], [d], [e], [f])
-> (Signal c, Signal d, Signal e, Signal f)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF ([((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
-> [(Int, Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
s) (Signal ([c], [d], [e], [f])
-> (Signal c, Signal d, Signal e, Signal f))
-> Signal ([c], [d], [e], [f])
-> (Signal c, Signal d, Signal e, Signal f)
forall a b. (a -> b) -> a -> b
$ [((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f])])]
-> Signal a -> Signal b -> Signal ([c], [d], [e], [f])
forall a b c.
[((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF ([((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
-> [((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f])])]
forall it ot a b y.
[(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n [((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))]
s) Signal a
xs Signal b
ys
actor34CSDF :: [((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
-> Signal a -> Signal b -> Signal c
-> (Signal d, Signal e, Signal f, Signal g)
actor34CSDF :: [((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
-> Signal a
-> Signal b
-> Signal c
-> (Signal d, Signal e, Signal f, Signal g)
actor34CSDF [((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
s Signal a
as Signal b
bs Signal c
cs
= [(Int, Int, Int, Int)]
-> Signal ([d], [e], [f], [g])
-> (Signal d, Signal e, Signal f, Signal g)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF ([((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
-> [(Int, Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
s) (Signal ([d], [e], [f], [g])
-> (Signal d, Signal e, Signal f, Signal g))
-> Signal ([d], [e], [f], [g])
-> (Signal d, Signal e, Signal f, Signal g)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int), Int,
[a] -> [b] -> [c] -> [([d], [e], [f], [g])])]
-> Signal a -> Signal b -> Signal c -> Signal ([d], [e], [f], [g])
forall a b c d.
[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF ([((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
-> [((Int, Int, Int), Int,
[a] -> [b] -> [c] -> [([d], [e], [f], [g])])]
forall it ot a b c y.
[(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n [((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))]
s) Signal a
as Signal b
bs Signal c
cs
actor44CSDF :: [((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal e, Signal f, Signal g, Signal h)
actor44CSDF :: [((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal e, Signal f, Signal g, Signal h)
actor44CSDF [((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
s Signal a
as Signal b
bs Signal c
cs Signal d
ds
= [(Int, Int, Int, Int)]
-> Signal ([e], [f], [g], [h])
-> (Signal e, Signal f, Signal g, Signal h)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF ([((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
-> [(Int, Int, Int, Int)]
forall a b c. [(a, b, c)] -> [b]
outputTokens [((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
s) (Signal ([e], [f], [g], [h])
-> (Signal e, Signal f, Signal g, Signal h))
-> Signal ([e], [f], [g], [h])
-> (Signal e, Signal f, Signal g, Signal h)
forall a b. (a -> b) -> a -> b
$ [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g], [h])])]
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal ([e], [f], [g], [h])
forall a b c d e.
[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF ([((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
-> [((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g], [h])])]
forall it ot a b c d y.
[(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n [((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))]
s) Signal a
as Signal b
bs Signal c
cs Signal d
ds
mapCSDF :: [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF :: [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF [] Signal a
_ = [Char] -> Signal b
forall a. HasCallStack => [Char] -> a
error [Char]
"mapCSDF: List of functions must not be empty"
mapCSDF ((Int, Int, [a] -> [b])
s:[(Int, Int, [a] -> [b])]
ss) Signal a
xs
| Int
c Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 = [Char] -> Signal b
forall a. HasCallStack => [Char] -> a
error [Char]
"mapCSDF: Number of consumed tokens must be a non-negative integer"
| Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c Signal a
xs = Signal b
forall a. Signal a
NullS
| Bool
otherwise = if [b] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
produced_tokens Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
p then
[b] -> Signal b
forall a. [a] -> Signal a
signal [b]
produced_tokens Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
forall a b. [(Int, Int, [a] -> [b])] -> Signal a -> Signal b
mapCSDF ([(Int, Int, [a] -> [b])]
ss[(Int, Int, [a] -> [b])]
-> [(Int, Int, [a] -> [b])] -> [(Int, Int, [a] -> [b])]
forall a. [a] -> [a] -> [a]
++[(Int, Int, [a] -> [b])
s]) (Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
dropS Int
c Signal a
xs)
else
[Char] -> Signal b
forall a. HasCallStack => [Char] -> a
error [Char]
"mapCSDF: Function does not produce correct number of tokens"
where (Int
c, Int
p, [a] -> [b]
f) = (Int, Int, [a] -> [b])
s
consumed_tokens :: [a]
consumed_tokens = Signal a -> [a]
forall a. Signal a -> [a]
fromSignal (Signal a -> [a]) -> Signal a -> [a]
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
takeS Int
c Signal a
xs
produced_tokens :: [b]
produced_tokens = [a] -> [b]
f [a]
consumed_tokens
zipWithCSDF :: [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF :: [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF [] Signal a
_ Signal b
_ = [Char] -> Signal c
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWithCSDF: List of functions must not be empty"
zipWithCSDF (((Int, Int), Int, [a] -> [b] -> [c])
s:[((Int, Int), Int, [a] -> [b] -> [c])]
ss) Signal a
as Signal b
bs
| Int
c1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 = [Char] -> Signal c
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWithCSDF: Number of consumed tokens must be a non-negative integer"
| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c1 Signal a
as) Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c2 Signal b
bs) = Signal c
forall a. Signal a
NullS
| Bool
otherwise = if [c] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [c]
produced_tokens Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
p then
[c] -> Signal c
forall a. [a] -> Signal a
signal [c]
produced_tokens Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ [((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
forall a b c.
[((Int, Int), Int, [a] -> [b] -> [c])]
-> Signal a -> Signal b -> Signal c
zipWithCSDF ([((Int, Int), Int, [a] -> [b] -> [c])]
ss[((Int, Int), Int, [a] -> [b] -> [c])]
-> [((Int, Int), Int, [a] -> [b] -> [c])]
-> [((Int, Int), Int, [a] -> [b] -> [c])]
forall a. [a] -> [a] -> [a]
++[((Int, Int), Int, [a] -> [b] -> [c])
s]) (Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
dropS Int
c1 Signal a
as) (Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
dropS Int
c2 Signal b
bs)
else
[Char] -> Signal c
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWithCSDF: Function does not produce correct number of tokens"
where ((Int, Int)
c, Int
p, [a] -> [b] -> [c]
f) = ((Int, Int), Int, [a] -> [b] -> [c])
s
(Int
c1, Int
c2) = (Int, Int)
c
consumed_tokens_as :: [a]
consumed_tokens_as = Signal a -> [a]
forall a. Signal a -> [a]
fromSignal (Signal a -> [a]) -> Signal a -> [a]
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
takeS Int
c1 Signal a
as
consumed_tokens_bs :: [b]
consumed_tokens_bs = Signal b -> [b]
forall a. Signal a -> [a]
fromSignal (Signal b -> [b]) -> Signal b -> [b]
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
takeS Int
c2 Signal b
bs
produced_tokens :: [c]
produced_tokens = [a] -> [b] -> [c]
f [a]
consumed_tokens_as [b]
consumed_tokens_bs
zipWith3CSDF :: [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF :: [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF [] Signal a
_ Signal b
_ Signal c
_ = [Char] -> Signal d
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith3CSDF: List of functions must not be empty"
zipWith3CSDF (((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
s:[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
ss) Signal a
as Signal b
bs Signal c
cs
| Int
c1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c3 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0
= [Char] -> Signal d
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith3CSDF: Number of consumed tokens must be a non-negative integer"
| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c1 Signal a
as)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c2 Signal b
bs)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal c -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c3 Signal c
cs) = Signal d
forall a. Signal a
NullS
| Bool
otherwise = if [d] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [d]
produced_tokens Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
p then
[d] -> Signal d
forall a. [a] -> Signal a
signal [d]
produced_tokens Signal d -> Signal d -> Signal d
forall a. Signal a -> Signal a -> Signal a
+-+ [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3CSDF ([((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
ss[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
-> [((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])]
forall a. [a] -> [a] -> [a]
++[((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
s]) (Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
dropS Int
c1 Signal a
as) (Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
dropS Int
c2 Signal b
bs) (Int -> Signal c -> Signal c
forall a. Int -> Signal a -> Signal a
dropS Int
c3 Signal c
cs)
else
[Char] -> Signal d
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith3CSDF: Function does not produce correct number of tokens"
where ((Int, Int, Int)
c, Int
p, [a] -> [b] -> [c] -> [d]
f) = ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
s
(Int
c1, Int
c2, Int
c3) = (Int, Int, Int)
c
consumed_tokens_as :: [a]
consumed_tokens_as = Signal a -> [a]
forall a. Signal a -> [a]
fromSignal (Signal a -> [a]) -> Signal a -> [a]
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
takeS Int
c1 Signal a
as
consumed_tokens_bs :: [b]
consumed_tokens_bs = Signal b -> [b]
forall a. Signal a -> [a]
fromSignal (Signal b -> [b]) -> Signal b -> [b]
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
takeS Int
c2 Signal b
bs
consumed_tokens_cs :: [c]
consumed_tokens_cs = Signal c -> [c]
forall a. Signal a -> [a]
fromSignal (Signal c -> [c]) -> Signal c -> [c]
forall a b. (a -> b) -> a -> b
$ Int -> Signal c -> Signal c
forall a. Int -> Signal a -> Signal a
takeS Int
c3 Signal c
cs
produced_tokens :: [d]
produced_tokens = [a] -> [b] -> [c] -> [d]
f [a]
consumed_tokens_as [b]
consumed_tokens_bs [c]
consumed_tokens_cs
zipWith4CSDF :: [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF :: [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF [] Signal a
_ Signal b
_ Signal c
_ Signal d
_ = [Char] -> Signal e
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith4CSDF: List of functions must not be empty"
zipWith4CSDF (((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
s:[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
ss) Signal a
as Signal b
bs Signal c
cs Signal d
ds
| Int
c1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c3 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 Bool -> Bool -> Bool
|| Int
c4 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0
= [Char] -> Signal e
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith4CSDF: Number of consumed tokens must be a non-negative integer"
| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c1 Signal a
as)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c2 Signal b
bs)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal c -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c3 Signal c
cs)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal d -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c4 Signal d
ds) = Signal e
forall a. Signal a
NullS
| Bool
otherwise = if [e] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [e]
produced_tokens Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
p then
[e] -> Signal e
forall a. [a] -> Signal a
signal [e]
produced_tokens Signal e -> Signal e -> Signal e
forall a. Signal a -> Signal a -> Signal a
+-+ [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
forall a b c d e.
[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4CSDF ([((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
ss[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
-> [((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])]
forall a. [a] -> [a] -> [a]
++[((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
s])
(Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
dropS Int
c1 Signal a
as) (Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
dropS Int
c2 Signal b
bs) (Int -> Signal c -> Signal c
forall a. Int -> Signal a -> Signal a
dropS Int
c3 Signal c
cs) (Int -> Signal d -> Signal d
forall a. Int -> Signal a -> Signal a
dropS Int
c4 Signal d
ds)
else
[Char] -> Signal e
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith4CSDF: Function does not produce correct number of tokens"
where ((Int, Int, Int, Int)
c, Int
p, [a] -> [b] -> [c] -> [d] -> [e]
f) = ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
s
(Int
c1, Int
c2, Int
c3, Int
c4) = (Int, Int, Int, Int)
c
consumed_tokens_as :: [a]
consumed_tokens_as = Signal a -> [a]
forall a. Signal a -> [a]
fromSignal (Signal a -> [a]) -> Signal a -> [a]
forall a b. (a -> b) -> a -> b
$ Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
takeS Int
c1 Signal a
as
consumed_tokens_bs :: [b]
consumed_tokens_bs = Signal b -> [b]
forall a. Signal a -> [a]
fromSignal (Signal b -> [b]) -> Signal b -> [b]
forall a b. (a -> b) -> a -> b
$ Int -> Signal b -> Signal b
forall a. Int -> Signal a -> Signal a
takeS Int
c2 Signal b
bs
consumed_tokens_cs :: [c]
consumed_tokens_cs = Signal c -> [c]
forall a. Signal a -> [a]
fromSignal (Signal c -> [c]) -> Signal c -> [c]
forall a b. (a -> b) -> a -> b
$ Int -> Signal c -> Signal c
forall a. Int -> Signal a -> Signal a
takeS Int
c3 Signal c
cs
consumed_tokens_ds :: [d]
consumed_tokens_ds = Signal d -> [d]
forall a. Signal a -> [a]
fromSignal (Signal d -> [d]) -> Signal d -> [d]
forall a b. (a -> b) -> a -> b
$ Int -> Signal d -> Signal d
forall a. Int -> Signal a -> Signal a
takeS Int
c4 Signal d
ds
produced_tokens :: [e]
produced_tokens = [a] -> [b] -> [c] -> [d] -> [e]
f [a]
consumed_tokens_as [b]
consumed_tokens_bs
[c]
consumed_tokens_cs [d]
consumed_tokens_ds
unzipCSDF :: [(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF :: [(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF [] Signal ([a], [b])
_ = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
unzipCSDF [(Int, Int)]
_ Signal ([a], [b])
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
unzipCSDF ((Int
p1, Int
p2) : [(Int, Int)]
ps) (([a]
s1, [b]
s2) :- Signal ([a], [b])
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
s1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p1 Bool -> Bool -> Bool
|| [b] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
s2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p2 = [Char] -> (Signal a, Signal b)
forall a. HasCallStack => [Char] -> a
error [Char]
"unzipCSDF: Process does not produce correct number of tokens"
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
s1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
sr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
s2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
sr2)
where (Signal a
sr1, Signal b
sr2) = [(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipCSDF ([(Int, Int)]
ps [(Int, Int)] -> [(Int, Int)] -> [(Int, Int)]
forall a. [a] -> [a] -> [a]
++ [(Int
p1, Int
p2)]) Signal ([a], [b])
ss
unzip3CSDF :: [(Int, Int, Int)] -> Signal ([a], [b], [c])
-> (Signal a, Signal b, Signal c)
unzip3CSDF :: [(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF [] Signal ([a], [b], [c])
_ = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS, Signal c
forall a. Signal a
NullS)
unzip3CSDF [(Int, Int, Int)]
_ Signal ([a], [b], [c])
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS, Signal c
forall a. Signal a
NullS)
unzip3CSDF ((Int
p1, Int
p2, Int
p3) : [(Int, Int, Int)]
ps) (([a]
s1, [b]
s2, [c]
s3) :- Signal ([a], [b], [c])
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
s1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p1 Bool -> Bool -> Bool
|| [b] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
s2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p2
Bool -> Bool -> Bool
|| [c] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [c]
s3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p3 = [Char] -> (Signal a, Signal b, Signal c)
forall a. HasCallStack => [Char] -> a
error [Char]
"unzip3CSDF: Process does not produce correct number of tokens"
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
s1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
sr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
s2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
sr2, [c] -> Signal c
forall a. [a] -> Signal a
signal [c]
s3 Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ Signal c
sr3)
where (Signal a
sr1, Signal b
sr2, Signal c
sr3) = [(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3CSDF ([(Int, Int, Int)]
ps [(Int, Int, Int)] -> [(Int, Int, Int)] -> [(Int, Int, Int)]
forall a. [a] -> [a] -> [a]
++ [(Int
p1, Int
p2, Int
p3)]) Signal ([a], [b], [c])
ss
unzip4CSDF :: [(Int, Int, Int, Int)] -> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF :: [(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF [] Signal ([a], [b], [c], [d])
_ = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS, Signal c
forall a. Signal a
NullS, Signal d
forall a. Signal a
NullS)
unzip4CSDF [(Int, Int, Int, Int)]
_ Signal ([a], [b], [c], [d])
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS, Signal c
forall a. Signal a
NullS, Signal d
forall a. Signal a
NullS)
unzip4CSDF ((Int
p1, Int
p2, Int
p3, Int
p4) : [(Int, Int, Int, Int)]
ps) (([a]
s1, [b]
s2, [c]
s3, [d]
s4) :- Signal ([a], [b], [c], [d])
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
s1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p1 Bool -> Bool -> Bool
|| [b] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
s2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p2
Bool -> Bool -> Bool
|| [c] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [c]
s3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p3 Bool -> Bool -> Bool
|| [d] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [d]
s4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p4 = [Char] -> (Signal a, Signal b, Signal c, Signal d)
forall a. HasCallStack => [Char] -> a
error [Char]
"unzip4CSDF: Process does not produce correct number of tokens"
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
s1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
sr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
s2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
sr2, [c] -> Signal c
forall a. [a] -> Signal a
signal [c]
s3 Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ Signal c
sr3, [d] -> Signal d
forall a. [a] -> Signal a
signal [d]
s4 Signal d -> Signal d -> Signal d
forall a. Signal a -> Signal a -> Signal a
+-+ Signal d
sr4)
where (Signal a
sr1, Signal b
sr2, Signal c
sr3, Signal d
sr4) = [(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4CSDF ([(Int, Int, Int, Int)]
ps [(Int, Int, Int, Int)]
-> [(Int, Int, Int, Int)] -> [(Int, Int, Int, Int)]
forall a. [a] -> [a] -> [a]
++ [(Int
p1, Int
p2, Int
p3, Int
p4)]) Signal ([a], [b], [c], [d])
ss
sufficient_tokens :: (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens :: a -> Signal t -> Bool
sufficient_tokens a
0 Signal t
_ = Bool
True
sufficient_tokens a
_ Signal t
NullS = Bool
False
sufficient_tokens a
n (t
_:-Signal t
xs)
= if a
n a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0 then
[Char] -> Bool
forall a. HasCallStack => [Char] -> a
error [Char]
"sufficient_tokens: n must not be negative"
else
a -> Signal t -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens (a
na -> a -> a
forall a. Num a => a -> a -> a
-a
1) Signal t
xs
outputTokens :: [(a, b, c)] -> [b]
outputTokens :: [(a, b, c)] -> [b]
outputTokens [] = []
outputTokens ((a
_, b
b, c
_):[(a, b, c)]
xs) = b
b b -> [b] -> [b]
forall a. a -> [a] -> [a]
: [(a, b, c)] -> [b]
forall a b c. [(a, b, c)] -> [b]
outputTokens [(a, b, c)]
xs
inpOut1n :: [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n :: [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n [] = []
inpOut1n ((it
it, ot
_, [a] -> y
f):[(it, ot, [a] -> y)]
xs) = (it
it, Int
1, \[a]
a -> [[a] -> y
f [a]
a]) (it, Int, [a] -> [y])
-> [(it, Int, [a] -> [y])] -> [(it, Int, [a] -> [y])]
forall a. a -> [a] -> [a]
: [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
forall it ot a y. [(it, ot, [a] -> y)] -> [(it, Int, [a] -> [y])]
inpOut1n [(it, ot, [a] -> y)]
xs
inpOut2n :: [(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n :: [(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n [] = []
inpOut2n ((it
it, ot
_, [a] -> [b] -> y
f):[(it, ot, [a] -> [b] -> y)]
xs) = (it
it, Int
1, \[a]
a [b]
b -> [[a] -> [b] -> y
f [a]
a [b]
b]) (it, Int, [a] -> [b] -> [y])
-> [(it, Int, [a] -> [b] -> [y])] -> [(it, Int, [a] -> [b] -> [y])]
forall a. a -> [a] -> [a]
: [(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
forall it ot a b y.
[(it, ot, [a] -> [b] -> y)] -> [(it, Int, [a] -> [b] -> [y])]
inpOut2n [(it, ot, [a] -> [b] -> y)]
xs
inpOut3n :: [(it, ot, [a] -> [b] -> [c] -> y)] -> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n :: [(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n [] = []
inpOut3n ((it
it, ot
_, [a] -> [b] -> [c] -> y
f):[(it, ot, [a] -> [b] -> [c] -> y)]
xs) = (it
it, Int
1, \[a]
a [b]
b [c]
c -> [[a] -> [b] -> [c] -> y
f [a]
a [b]
b [c]
c]) (it, Int, [a] -> [b] -> [c] -> [y])
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
forall a. a -> [a] -> [a]
: [(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
forall it ot a b c y.
[(it, ot, [a] -> [b] -> [c] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [y])]
inpOut3n [(it, ot, [a] -> [b] -> [c] -> y)]
xs
inpOut4n :: [(it, ot, [a] -> [b] -> [c] -> [d] -> y)] -> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n :: [(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n [] = []
inpOut4n ((it
it, ot
_, [a] -> [b] -> [c] -> [d] -> y
f):[(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
xs) = (it
it, Int
1, \[a]
a [b]
b [c]
c [d]
d -> [[a] -> [b] -> [c] -> [d] -> y
f [a]
a [b]
b [c]
c [d]
d]) (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
forall a. a -> [a] -> [a]
: [(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
forall it ot a b c d y.
[(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
-> [(it, Int, [a] -> [b] -> [c] -> [d] -> [y])]
inpOut4n [(it, ot, [a] -> [b] -> [c] -> [d] -> y)]
xs