module ForSyDe.Shallow.MoC.SADF (
delaySADF,
kernel11SADF, kernel12SADF, kernel13SADF, kernel14SADF, kernel15SADF,
kernel21SADF, kernel22SADF, kernel23SADF, kernel24SADF, kernel25SADF,
kernel31SADF, kernel32SADF, kernel33SADF, kernel34SADF, kernel35SADF,
kernel41SADF, kernel42SADF, kernel43SADF, kernel44SADF, kernel45SADF,
kernel51SADF, kernel52SADF, kernel53SADF, kernel54SADF, kernel55SADF,
detector11SADF, detector12SADF, detector13SADF, detector14SADF, detector15SADF,
detector21SADF, detector22SADF, detector23SADF, detector24SADF, detector25SADF,
detector31SADF, detector32SADF, detector33SADF, detector34SADF, detector35SADF,
detector41SADF, detector42SADF, detector43SADF, detector44SADF, detector45SADF,
detector51SADF, detector52SADF, detector53SADF, detector54SADF, detector55SADF
) where
import ForSyDe.Shallow.Core
delaySADF :: [a] -> Signal a -> Signal a
delaySADF :: [a] -> Signal a -> Signal a
delaySADF [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
kernel11SADF :: Signal (Int, Int, [a] -> [b])
-> Signal a
-> Signal b
kernel11SADF :: Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
kernel11SADF = Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF
kernel21SADF :: Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b
-> Signal c
kernel21SADF :: Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
kernel21SADF = Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF
kernel31SADF :: Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c
-> Signal d
kernel31SADF :: Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
kernel31SADF = Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF
kernel41SADF :: Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d
-> Signal e
kernel41SADF :: Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
kernel41SADF = Signal ((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.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF
kernel51SADF :: Signal ((Int, Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> Signal f
kernel51SADF :: Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
kernel51SADF = Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF
kernel12SADF :: Signal (Int, (Int, Int), [a] -> ([b], [c]))
-> Signal a
-> (Signal b, Signal c)
kernel12SADF :: Signal (Int, (Int, Int), [a] -> ([b], [c]))
-> Signal a -> (Signal b, Signal c)
kernel12SADF Signal (Int, (Int, Int), [a] -> ([b], [c]))
ct Signal a
xs = [(Int, Int)] -> Signal ([b], [c]) -> (Signal b, Signal c)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipSADF (Signal (Int, (Int, Int), [a] -> ([b], [c])) -> [(Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal (Int, (Int, Int), [a] -> ([b], [c]))
ct) (Signal ([b], [c]) -> (Signal b, Signal c))
-> Signal ([b], [c]) -> (Signal b, Signal c)
forall a b. (a -> b) -> a -> b
$ Signal (Int, Int, [a] -> [([b], [c])])
-> Signal a -> Signal ([b], [c])
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF (Signal (Int, (Int, Int), [a] -> ([b], [c]))
-> Signal (Int, Int, [a] -> [([b], [c])])
forall it ot a y.
Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal (Int, (Int, Int), [a] -> ([b], [c]))
ct) Signal a
xs
kernel22SADF :: Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
-> Signal a -> Signal b
-> (Signal c, Signal d)
kernel22SADF :: Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
-> Signal a -> Signal b -> (Signal c, Signal d)
kernel22SADF Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
ct 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)
unzipSADF (Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
-> [(Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
ct) (Signal ([c], [d]) -> (Signal c, Signal d))
-> Signal ([c], [d]) -> (Signal c, Signal d)
forall a b. (a -> b) -> a -> b
$ Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d])])
-> Signal a -> Signal b -> Signal ([c], [d])
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF (Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
-> Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d])])
forall it ot a b y.
Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal ((Int, Int), (Int, Int), [a] -> [b] -> ([c], [d]))
ct) Signal a
xs Signal b
ys
kernel32SADF :: Signal ((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
-> Signal a -> Signal b -> Signal c
-> (Signal d, Signal e)
kernel32SADF :: Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
-> Signal a -> Signal b -> Signal c -> (Signal d, Signal e)
kernel32SADF Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
ct 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)
unzipSADF (Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
-> [(Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
ct) (Signal ([d], [e]) -> (Signal d, Signal e))
-> Signal ([d], [e]) -> (Signal d, Signal e)
forall a b. (a -> b) -> a -> b
$ Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e])])
-> Signal a -> Signal b -> Signal c -> Signal ([d], [e])
forall a b c d.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF (Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
-> Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e])])
forall it ot a b c y.
Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal
((Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> ([d], [e]))
ct) Signal a
as Signal b
bs Signal c
cs
kernel42SADF :: Signal ((Int, Int, Int, Int), (Int, Int), [a] -> [b] -> [c] -> [d] -> ([e], [f]))
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal e, Signal f)
kernel42SADF :: Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal e, Signal f)
kernel42SADF Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
ct 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)
unzipSADF (Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
-> [(Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
ct) (Signal ([e], [f]) -> (Signal e, Signal f))
-> Signal ([e], [f]) -> (Signal e, Signal f)
forall a b. (a -> b) -> a -> b
$ Signal
((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.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF (Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
-> Signal
((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f])])
forall it ot a b c d y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal
((Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds
kernel52SADF :: Signal ((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)
kernel52SADF :: Signal
((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)
kernel52SADF Signal
((Int, Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g]))
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
= [(Int, Int)] -> Signal ([f], [g]) -> (Signal f, Signal g)
forall a b.
[(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipSADF (Signal
((Int, Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g]))
-> [(Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g]))
ct) (Signal ([f], [g]) -> (Signal f, Signal g))
-> Signal ([f], [g]) -> (Signal f, Signal g)
forall a b. (a -> b) -> a -> b
$ Signal
((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], [g])
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g]))
-> Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g])])
forall it ot a b c d e y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal
((Int, Int, Int, Int, Int), (Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
kernel13SADF :: Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
-> Signal a
-> (Signal b, Signal c, Signal d)
kernel13SADF :: Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
-> Signal a -> (Signal b, Signal c, Signal d)
kernel13SADF Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
ct 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)
unzip3SADF (Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
-> [(Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
ct) (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
$ Signal (Int, Int, [a] -> [([b], [c], [d])])
-> Signal a -> Signal ([b], [c], [d])
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF (Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
-> Signal (Int, Int, [a] -> [([b], [c], [d])])
forall it ot a y.
Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal (Int, (Int, Int, Int), [a] -> ([b], [c], [d]))
ct) Signal a
xs
kernel23SADF :: Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
-> Signal a -> Signal b
-> (Signal c, Signal d, Signal e)
kernel23SADF :: Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
-> Signal a -> Signal b -> (Signal c, Signal d, Signal e)
kernel23SADF Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
ct 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)
unzip3SADF (Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
-> [(Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
ct) (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
$ Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d], [e])])
-> Signal a -> Signal b -> Signal ([c], [d], [e])
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF (Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
-> Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d], [e])])
forall it ot a b y.
Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal ((Int, Int), (Int, Int, Int), [a] -> [b] -> ([c], [d], [e]))
ct) Signal a
xs Signal b
ys
kernel33SADF :: Signal ((Int, Int, Int), (Int, Int, Int), [a] -> [b] -> [c] -> ([d], [e], [f]))
-> Signal a -> Signal b -> Signal c
-> (Signal d, Signal e, Signal f)
kernel33SADF :: Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
-> Signal a
-> Signal b
-> Signal c
-> (Signal d, Signal e, Signal f)
kernel33SADF Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
ct 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)
unzip3SADF (Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
-> [(Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
ct) (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
$ Signal
((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.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF (Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
-> Signal
((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e], [f])])
forall it ot a b c y.
Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal
((Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f]))
ct) Signal a
as Signal b
bs Signal c
cs
kernel43SADF :: Signal ((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)
kernel43SADF :: Signal
((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)
kernel43SADF Signal
((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))
ct 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)
unzip3SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))
-> [(Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))
ct) (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
$ Signal
((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.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))
-> Signal
((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g])])
forall it ot a b c d y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal
((Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds
kernel53SADF :: Signal ((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)
kernel53SADF :: Signal
((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)
kernel53SADF Signal
((Int, Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h]))
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
= [(Int, Int, Int)]
-> Signal ([f], [g], [h]) -> (Signal f, Signal g, Signal h)
forall a b c.
[(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h]))
-> [(Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h]))
ct) (Signal ([f], [g], [h]) -> (Signal f, Signal g, Signal h))
-> Signal ([f], [g], [h]) -> (Signal f, Signal g, Signal h)
forall a b. (a -> b) -> a -> b
$ Signal
((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], [g], [h])
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h]))
-> Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g], [h])])
forall it ot a b c d e y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal
((Int, Int, Int, Int, Int), (Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
kernel14SADF :: Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
-> Signal a
-> (Signal b, Signal c, Signal d, Signal e)
kernel14SADF :: Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
-> Signal a -> (Signal b, Signal c, Signal d, Signal e)
kernel14SADF Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
ct 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)
unzip4SADF (Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
-> [(Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
ct) (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
$ Signal (Int, Int, [a] -> [([b], [c], [d], [e])])
-> Signal a -> Signal ([b], [c], [d], [e])
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF (Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
-> Signal (Int, Int, [a] -> [([b], [c], [d], [e])])
forall it ot a y.
Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal (Int, (Int, Int, Int, Int), [a] -> ([b], [c], [d], [e]))
ct) Signal a
xs
kernel24SADF :: Signal ((Int, Int), (Int, Int, Int, Int), [a] -> [b] -> ([c], [d], [e], [f]))
-> Signal a -> Signal b
-> (Signal c, Signal d, Signal e, Signal f)
kernel24SADF :: Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
-> Signal a -> Signal b -> (Signal c, Signal d, Signal e, Signal f)
kernel24SADF Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
ct 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)
unzip4SADF (Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
-> [(Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
ct) (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
$ Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f])])
-> Signal a -> Signal b -> Signal ([c], [d], [e], [f])
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF (Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
-> Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f])])
forall it ot a b y.
Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal
((Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f]))
ct) Signal a
xs Signal b
ys
kernel34SADF :: Signal ((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)
kernel34SADF :: Signal
((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)
kernel34SADF Signal
((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))
ct 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)
unzip4SADF (Signal
((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))
-> [(Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))
ct) (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
$ Signal
((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.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF (Signal
((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))
-> Signal
((Int, Int, Int), Int, [a] -> [b] -> [c] -> [([d], [e], [f], [g])])
forall it ot a b c y.
Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal
((Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g]))
ct) Signal a
as Signal b
bs Signal c
cs
kernel44SADF :: Signal ((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)
kernel44SADF :: Signal
((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)
kernel44SADF Signal
((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))
ct 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)
unzip4SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))
-> [(Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))
ct) (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
$ Signal
((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.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))
-> Signal
((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g], [h])])
forall it ot a b c d y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal
((Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds
kernel54SADF :: Signal ((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal f, Signal g, Signal h, Signal i)
kernel54SADF :: Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal f, Signal g, Signal h, Signal i)
kernel54SADF Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
= [(Int, Int, Int, Int)]
-> Signal ([f], [g], [h], [i])
-> (Signal f, Signal g, Signal h, Signal i)
forall a b c d.
[(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
-> [(Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
ct) (Signal ([f], [g], [h], [i])
-> (Signal f, Signal g, Signal h, Signal i))
-> Signal ([f], [g], [h], [i])
-> (Signal f, Signal g, Signal h, Signal i)
forall a b. (a -> b) -> a -> b
$ Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g], [h], [i])])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal ([f], [g], [h], [i])
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
-> Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g], [h], [i])])
forall it ot a b c d e y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
kernel15SADF :: Signal (Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
-> Signal a
-> (Signal b, Signal c, Signal d, Signal e, Signal f)
kernel15SADF :: Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
-> Signal a -> (Signal b, Signal c, Signal d, Signal e, Signal f)
kernel15SADF Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
ct Signal a
xs = [(Int, Int, Int, Int, Int)]
-> Signal ([b], [c], [d], [e], [f])
-> (Signal b, Signal c, Signal d, Signal e, Signal f)
forall a b c d e.
[(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF (Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
-> [(Int, Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
ct) (Signal ([b], [c], [d], [e], [f])
-> (Signal b, Signal c, Signal d, Signal e, Signal f))
-> Signal ([b], [c], [d], [e], [f])
-> (Signal b, Signal c, Signal d, Signal e, Signal f)
forall a b. (a -> b) -> a -> b
$ Signal (Int, Int, [a] -> [([b], [c], [d], [e], [f])])
-> Signal a -> Signal ([b], [c], [d], [e], [f])
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF (Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
-> Signal (Int, Int, [a] -> [([b], [c], [d], [e], [f])])
forall it ot a y.
Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal
(Int, (Int, Int, Int, Int, Int), [a] -> ([b], [c], [d], [e], [f]))
ct) Signal a
xs
kernel25SADF :: Signal ((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)
kernel25SADF :: Signal
((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)
kernel25SADF Signal
((Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f], [g]))
ct Signal a
xs Signal b
ys = [(Int, Int, Int, Int, Int)]
-> Signal ([c], [d], [e], [f], [g])
-> (Signal c, Signal d, Signal e, Signal f, Signal g)
forall a b c d e.
[(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF (Signal
((Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f], [g]))
-> [(Int, Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f], [g]))
ct) (Signal ([c], [d], [e], [f], [g])
-> (Signal c, Signal d, Signal e, Signal f, Signal g))
-> Signal ([c], [d], [e], [f], [g])
-> (Signal c, Signal d, Signal e, Signal f, Signal g)
forall a b. (a -> b) -> a -> b
$ Signal ((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f], [g])])
-> Signal a -> Signal b -> Signal ([c], [d], [e], [f], [g])
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF (Signal
((Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f], [g]))
-> Signal
((Int, Int), Int, [a] -> [b] -> [([c], [d], [e], [f], [g])])
forall it ot a b y.
Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal
((Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> ([c], [d], [e], [f], [g]))
ct) Signal a
xs Signal b
ys
kernel35SADF :: Signal ((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)
kernel35SADF :: Signal
((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)
kernel35SADF Signal
((Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g], [h]))
ct Signal a
as Signal b
bs Signal c
cs
= [(Int, Int, Int, Int, Int)]
-> Signal ([d], [e], [f], [g], [h])
-> (Signal d, Signal e, Signal f, Signal g, Signal h)
forall a b c d e.
[(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF (Signal
((Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g], [h]))
-> [(Int, Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g], [h]))
ct) (Signal ([d], [e], [f], [g], [h])
-> (Signal d, Signal e, Signal f, Signal g, Signal h))
-> Signal ([d], [e], [f], [g], [h])
-> (Signal d, Signal e, Signal f, Signal g, Signal h)
forall a b. (a -> b) -> a -> b
$ Signal
((Int, Int, Int), Int,
[a] -> [b] -> [c] -> [([d], [e], [f], [g], [h])])
-> Signal a
-> Signal b
-> Signal c
-> Signal ([d], [e], [f], [g], [h])
forall a b c d.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF (Signal
((Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g], [h]))
-> Signal
((Int, Int, Int), Int,
[a] -> [b] -> [c] -> [([d], [e], [f], [g], [h])])
forall it ot a b c y.
Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal
((Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> ([d], [e], [f], [g], [h]))
ct) Signal a
as Signal b
bs Signal c
cs
kernel45SADF :: Signal ((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal e, Signal f, Signal g, Signal h, Signal i)
kernel45SADF :: Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal e, Signal f, Signal g, Signal h, Signal i)
kernel45SADF Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds
= [(Int, Int, Int, Int, Int)]
-> Signal ([e], [f], [g], [h], [i])
-> (Signal e, Signal f, Signal g, Signal h, Signal i)
forall a b c d e.
[(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
-> [(Int, Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
ct) (Signal ([e], [f], [g], [h], [i])
-> (Signal e, Signal f, Signal g, Signal h, Signal i))
-> Signal ([e], [f], [g], [h], [i])
-> (Signal e, Signal f, Signal g, Signal h, Signal i)
forall a b. (a -> b) -> a -> b
$ Signal
((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g], [h], [i])])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal ([e], [f], [g], [h], [i])
forall a b c d e.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF (Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
-> Signal
((Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [([e], [f], [g], [h], [i])])
forall it ot a b c d y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal
((Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> ([e], [f], [g], [h], [i]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds
kernel55SADF :: Signal ((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal f, Signal g, Signal h, Signal i, Signal j)
kernel55SADF :: Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal f, Signal g, Signal h, Signal i, Signal j)
kernel55SADF Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
= [(Int, Int, Int, Int, Int)]
-> Signal ([f], [g], [h], [i], [j])
-> (Signal f, Signal g, Signal h, Signal i, Signal j)
forall a b c d e.
[(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
-> [(Int, Int, Int, Int, Int)]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
ct) (Signal ([f], [g], [h], [i], [j])
-> (Signal f, Signal g, Signal h, Signal i, Signal j))
-> Signal ([f], [g], [h], [i], [j])
-> (Signal f, Signal g, Signal h, Signal i, Signal j)
forall a b. (a -> b) -> a -> b
$ Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g], [h], [i], [j])])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal ([f], [g], [h], [i], [j])
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF (Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
-> Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [([f], [g], [h], [i], [j])])
forall it ot a b c d e y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal
((Int, Int, Int, Int, Int), (Int, Int, Int, Int, Int),
[a] -> [b] -> [c] -> [d] -> [e] -> ([f], [g], [h], [i], [j]))
ct) Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
detector11SADF :: Int
-> (s -> [a] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal y
detector11SADF :: Int
-> (s -> [a] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal y
detector11SADF Int
c s -> [a] -> s
f s -> (Int, [y])
g s
s0 Signal a
as = (s -> (Int, [y])) -> Signal s -> Signal y
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [y])
g Signal s
next_state
where next_state :: Signal s
next_state = Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f Signal s
current_state Signal a
as
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector21SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a -> Signal b
-> Signal y
detector21SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal b
-> Signal y
detector21SADF (Int, Int)
c s -> [a] -> [b] -> s
f s -> (Int, [y])
g s
s0 Signal a
as Signal b
bs = (s -> (Int, [y])) -> Signal s -> Signal y
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [y])
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
c s -> [a] -> [b] -> s
f Signal s
current_state Signal a
as Signal b
bs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector31SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a -> Signal b -> Signal c
-> Signal y
detector31SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal y
detector31SADF (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f s -> (Int, [y])
g s
s0 Signal a
as Signal b
bs Signal c
cs = (s -> (Int, [y])) -> Signal s -> Signal y
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [y])
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector41SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d
-> Signal y
detector41SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal y
detector41SADF (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f s -> (Int, [y])
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds = (s -> (Int, [y])) -> Signal s -> Signal y
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [y])
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector51SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> Signal y
detector51SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> (Int, [y]))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal y
detector51SADF (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s -> (Int, [y])
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es = (s -> (Int, [y])) -> Signal s -> Signal y
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [y])
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector12SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> (Signal y1, Signal y2)
detector12SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> (Signal y1, Signal y2)
detector12SADF Int
c s -> [a] -> s
f s -> ((Int, Int), ([y1], [y2]))
g s
s0 Signal a
as = (s -> ((Int, Int), ([y1], [y2])))
-> Signal s -> (Signal y1, Signal y2)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([y1], [y2]))
g Signal s
next_state
where next_state :: Signal s
next_state = Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f Signal s
current_state Signal a
as
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector22SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a -> Signal b
-> (Signal y1, Signal y2)
detector22SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> Signal b
-> (Signal y1, Signal y2)
detector22SADF (Int, Int)
c s -> [a] -> [b] -> s
f s -> ((Int, Int), ([y1], [y2]))
g s
s0 Signal a
as Signal b
bs = (s -> ((Int, Int), ([y1], [y2])))
-> Signal s -> (Signal y1, Signal y2)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([y1], [y2]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
c s -> [a] -> [b] -> s
f Signal s
current_state Signal a
as Signal b
bs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector32SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a -> Signal b -> Signal c
-> (Signal y1, Signal y2)
detector32SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> (Signal y1, Signal y2)
detector32SADF (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f s -> ((Int, Int), ([y1], [y2]))
g s
s0 Signal a
as Signal b
bs Signal c
cs = (s -> ((Int, Int), ([y1], [y2])))
-> Signal s -> (Signal y1, Signal y2)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([y1], [y2]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector42SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal y1, Signal y2)
detector42SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal y1, Signal y2)
detector42SADF (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f s -> ((Int, Int), ([y1], [y2]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds = (s -> ((Int, Int), ([y1], [y2])))
-> Signal s -> (Signal y1, Signal y2)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([y1], [y2]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector52SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal y1, Signal y2)
detector52SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int), ([y1], [y2])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal y1, Signal y2)
detector52SADF (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s -> ((Int, Int), ([y1], [y2]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es = (s -> ((Int, Int), ([y1], [y2])))
-> Signal s -> (Signal y1, Signal y2)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([y1], [y2]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector13SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3)
detector13SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3)
detector13SADF Int
c s -> [a] -> s
f s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g s
s0 Signal a
as = (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> Signal s -> (Signal y1, Signal y2, Signal y3)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g Signal s
next_state
where next_state :: Signal s
next_state = Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f Signal s
current_state Signal a
as
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector23SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a -> Signal b
-> (Signal y1, Signal y2, Signal y3)
detector23SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> Signal b
-> (Signal y1, Signal y2, Signal y3)
detector23SADF (Int, Int)
c s -> [a] -> [b] -> s
f s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g s
s0 Signal a
as Signal b
bs = (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> Signal s -> (Signal y1, Signal y2, Signal y3)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
c s -> [a] -> [b] -> s
f Signal s
current_state Signal a
as Signal b
bs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector33SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a -> Signal b -> Signal c
-> (Signal y1, Signal y2, Signal y3)
detector33SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> (Signal y1, Signal y2, Signal y3)
detector33SADF (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g s
s0 Signal a
as Signal b
bs Signal c
cs = (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> Signal s -> (Signal y1, Signal y2, Signal y3)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector43SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal y1, Signal y2, Signal y3)
detector43SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal y1, Signal y2, Signal y3)
detector43SADF (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds = (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> Signal s -> (Signal y1, Signal y2, Signal y3)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector53SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal y1, Signal y2, Signal y3)
detector53SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal y1, Signal y2, Signal y3)
detector53SADF (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es = (s -> ((Int, Int, Int), ([y1], [y2], [y3])))
-> Signal s -> (Signal y1, Signal y2, Signal y3)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([y1], [y2], [y3]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector14SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector14SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector14SADF Int
c s -> [a] -> s
f s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g s
s0 Signal a
as = (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> Signal s -> (Signal y1, Signal y2, Signal y3, Signal y4)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g Signal s
next_state
where next_state :: Signal s
next_state = Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f Signal s
current_state Signal a
as
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector24SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a -> Signal b
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector24SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> Signal b
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector24SADF (Int, Int)
c s -> [a] -> [b] -> s
f s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g s
s0 Signal a
as Signal b
bs = (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> Signal s -> (Signal y1, Signal y2, Signal y3, Signal y4)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
c s -> [a] -> [b] -> s
f Signal s
current_state Signal a
as Signal b
bs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector34SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a -> Signal b -> Signal c
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector34SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector34SADF (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g s
s0 Signal a
as Signal b
bs Signal c
cs = (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> Signal s -> (Signal y1, Signal y2, Signal y3, Signal y4)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector44SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector44SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector44SADF (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds = (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> Signal s -> (Signal y1, Signal y2, Signal y3, Signal y4)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector54SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector54SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal y1, Signal y2, Signal y3, Signal y4)
detector54SADF (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es = (s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4])))
-> Signal s -> (Signal y1, Signal y2, Signal y3, Signal y4)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([y1], [y2], [y3], [y4]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector15SADF :: Int
-> (s -> [a] -> s)
-> (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector15SADF :: Int
-> (s -> [a] -> s)
-> (s
-> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector15SADF Int
c s -> [a] -> s
f s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g s
s0 Signal a
as = (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> Signal s
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g Signal s
next_state
where next_state :: Signal s
next_state = Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f Signal s
current_state Signal a
as
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector25SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a -> Signal b
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector25SADF :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> (s
-> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> Signal b
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector25SADF (Int, Int)
c s -> [a] -> [b] -> s
f s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g s
s0 Signal a
as Signal b
bs = (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> Signal s
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
c s -> [a] -> [b] -> s
f Signal s
current_state Signal a
as Signal b
bs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector35SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a -> Signal b -> Signal c
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector35SADF :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> (s
-> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector35SADF (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g s
s0 Signal a
as Signal b
bs Signal c
cs = (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> Signal s
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
c s -> [a] -> [b] -> [c] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector45SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector45SADF :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> (s
-> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector45SADF (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds = (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> Signal s
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
detector55SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector55SADF :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> (s
-> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
detector55SADF (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g s
s0 Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es = (s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5])))
-> Signal s
-> (Signal y1, Signal y2, Signal y3, Signal y4, Signal y5)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([y1], [y2], [y3], [y4], [y5]))
g Signal s
next_state
where next_state :: Signal s
next_state = (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
c s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
current_state Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
current_state :: Signal s
current_state = [s] -> Signal s -> Signal s
forall a. [a] -> Signal a -> Signal a
delaySADF [s
s0] Signal s
next_state
mapSADF :: Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF :: Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF Signal (Int, Int, [a] -> [b])
NullS Signal a
_ = Signal b
forall a. Signal a
NullS
mapSADF Signal (Int, Int, [a] -> [b])
ct 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]
"mapSADF: 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
+-+ Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
forall a b. Signal (Int, Int, [a] -> [b]) -> Signal a -> Signal b
mapSADF (Signal (Int, Int, [a] -> [b]) -> Signal (Int, Int, [a] -> [b])
forall a. Signal a -> Signal a
tailS Signal (Int, Int, [a] -> [b])
ct) (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]
"mapSADF: Function does not produce correct number of tokens"
where (Int
c, Int
p, [a] -> [b]
f) = Signal (Int, Int, [a] -> [b]) -> (Int, Int, [a] -> [b])
forall a. Signal a -> a
headS Signal (Int, Int, [a] -> [b])
ct
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
zipWithSADF :: Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF :: Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF Signal ((Int, Int), Int, [a] -> [b] -> [c])
NullS Signal a
_ Signal b
_ = Signal c
forall a. Signal a
NullS
zipWithSADF Signal ((Int, Int), Int, [a] -> [b] -> [c])
ct 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]
"zipWithSADF: 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
+-+ Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
forall a b c.
Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal a -> Signal b -> Signal c
zipWithSADF (Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> Signal ((Int, Int), Int, [a] -> [b] -> [c])
forall a. Signal a -> Signal a
tailS Signal ((Int, Int), Int, [a] -> [b] -> [c])
ct) (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]
"zipWithSADF: Function does not produce correct number of tokens"
where ((Int
c1,Int
c2), Int
p, [a] -> [b] -> [c]
f) = Signal ((Int, Int), Int, [a] -> [b] -> [c])
-> ((Int, Int), Int, [a] -> [b] -> [c])
forall a. Signal a -> a
headS Signal ((Int, Int), Int, [a] -> [b] -> [c])
ct
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
zipWith3SADF :: Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF :: Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
NullS Signal a
_ Signal b
_ Signal c
_ = Signal d
forall a. Signal a
NullS
zipWith3SADF Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
ct 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]
"zipWith3SADF: 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
+-+ Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SADF (Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
forall a. Signal a -> Signal a
tailS Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
ct) (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]
"zipWith3SADF: Function does not produce correct number of tokens"
where ((Int
c1, Int
c2, Int
c3), Int
p, [a] -> [b] -> [c] -> [d]
f) = Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
-> ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
forall a. Signal a -> a
headS Signal ((Int, Int, Int), Int, [a] -> [b] -> [c] -> [d])
ct
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
zipWith4SADF :: Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF :: Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
NullS Signal a
_ Signal b
_ Signal c
_ Signal d
_ = Signal e
forall a. Signal a
NullS
zipWith4SADF Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
ct 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]
"zipWith4SADF: 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
+-+ Signal ((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.
Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SADF (Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> Signal
((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
forall a. Signal a -> Signal a
tailS Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
ct) (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]
"zipWith4SADF: Function does not produce correct number of tokens"
where ((Int
c1, Int
c2, Int
c3, Int
c4), Int
p, [a] -> [b] -> [c] -> [d] -> [e]
f) = Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
-> ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
forall a. Signal a -> a
headS Signal ((Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e])
ct
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
zipWith5SADF :: Signal ((Int, Int, Int, Int, Int), Int, [a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e -> Signal f
zipWith5SADF :: Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
NullS Signal a
_ Signal b
_ Signal c
_ Signal d
_ Signal e
_ = Signal f
forall a. Signal a
NullS
zipWith5SADF Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
ct Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
| 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 Bool -> Bool -> Bool
|| Int
c5 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0
= [Char] -> Signal f
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith5SADF: 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)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal e -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c5 Signal e
es) = Signal f
forall a. Signal a
NullS
| Bool
otherwise = if [f] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [f]
produced_tokens Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
p then
[f] -> Signal f
forall a. [a] -> Signal a
signal [f]
produced_tokens Signal f -> Signal f -> Signal f
forall a. Signal a -> Signal a -> Signal a
+-+ Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
forall a b c d e f.
Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
zipWith5SADF (Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
forall a. Signal a -> Signal a
tailS Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
ct) (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) (Int -> Signal e -> Signal e
forall a. Int -> Signal a -> Signal a
dropS Int
c5 Signal e
es)
else
[Char] -> Signal f
forall a. HasCallStack => [Char] -> a
error [Char]
"zipWith5SADF: Function does not produce correct number of tokens"
where ((Int
c1, Int
c2, Int
c3, Int
c4, Int
c5), Int
p, [a] -> [b] -> [c] -> [d] -> [e] -> [f]
f) = Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
-> ((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
forall a. Signal a -> a
headS Signal
((Int, Int, Int, Int, Int), Int,
[a] -> [b] -> [c] -> [d] -> [e] -> [f])
ct
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
consumed_tokens_es :: [e]
consumed_tokens_es = Signal e -> [e]
forall a. Signal a -> [a]
fromSignal (Signal e -> [e]) -> Signal e -> [e]
forall a b. (a -> b) -> a -> b
$ Int -> Signal e -> Signal e
forall a. Int -> Signal a -> Signal a
takeS Int
c5 Signal e
es
produced_tokens :: [f]
produced_tokens = [a] -> [b] -> [c] -> [d] -> [e] -> [f]
f [a]
consumed_tokens_as [b]
consumed_tokens_bs
[c]
consumed_tokens_cs [d]
consumed_tokens_ds [e]
consumed_tokens_es
unzipSADF :: [(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipSADF :: [(Int, Int)] -> Signal ([a], [b]) -> (Signal a, Signal b)
unzipSADF [] Signal ([a], [b])
_ = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
unzipSADF [(Int, Int)]
_ Signal ([a], [b])
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
unzipSADF ((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]
"unzipSADF: 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)
unzipSADF [(Int, Int)]
ps Signal ([a], [b])
ss
unzip3SADF :: [(Int, Int, Int)] -> Signal ([a], [b], [c])
-> (Signal a, Signal b, Signal c)
unzip3SADF :: [(Int, Int, Int)]
-> Signal ([a], [b], [c]) -> (Signal a, Signal b, Signal c)
unzip3SADF [] 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)
unzip3SADF [(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)
unzip3SADF ((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]
"unzip3SADF: 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)
unzip3SADF [(Int, Int, Int)]
ps Signal ([a], [b], [c])
ss
unzip4SADF :: [(Int, Int, Int, Int)] -> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4SADF :: [(Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d])
-> (Signal a, Signal b, Signal c, Signal d)
unzip4SADF [] 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)
unzip4SADF [(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)
unzip4SADF ((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]
"unzip4SADF: 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)
unzip4SADF [(Int, Int, Int, Int)]
ps Signal ([a], [b], [c], [d])
ss
unzip5SADF :: [(Int, Int, Int, Int, Int)] -> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF :: [(Int, Int, Int, Int, Int)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF [] Signal ([a], [b], [c], [d], [e])
_ = (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, Signal e
forall a. Signal a
NullS)
unzip5SADF [(Int, Int, Int, Int, Int)]
_ Signal ([a], [b], [c], [d], [e])
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, Signal e
forall a. Signal a
NullS)
unzip5SADF ((Int
p1, Int
p2, Int
p3, Int
p4, Int
p5) : [(Int, Int, Int, Int, Int)]
ps) (([a]
s1, [b]
s2, [c]
s3, [d]
s4, [e]
s5) :- Signal ([a], [b], [c], [d], [e])
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
Bool -> Bool -> Bool
|| [e] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [e]
s5 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p5 = [Char] -> (Signal a, Signal b, Signal c, Signal d, Signal e)
forall a. HasCallStack => [Char] -> a
error [Char]
"unzip5SADF: 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, [e] -> Signal e
forall a. [a] -> Signal a
signal [e]
s5 Signal e -> Signal e -> Signal e
forall a. Signal a -> Signal a -> Signal a
+-+ Signal e
sr5)
where (Signal a
sr1, Signal b
sr2, Signal c
sr3, Signal d
sr4, Signal e
sr5) = [(Int, Int, Int, Int, Int)]
-> Signal ([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)]
-> Signal ([a], [b], [c], [d], [e])
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SADF [(Int, Int, Int, Int, Int)]
ps Signal ([a], [b], [c], [d], [e])
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
get_prodToken :: Signal (a,b,c) -> [b]
get_prodToken :: Signal (a, b, c) -> [b]
get_prodToken Signal (a, b, c)
NullS = []
get_prodToken ((a
_, b
x, c
_):-Signal (a, b, c)
xs) = b
x b -> [b] -> [b]
forall a. a -> [a] -> [a]
: Signal (a, b, c) -> [b]
forall a b c. Signal (a, b, c) -> [b]
get_prodToken Signal (a, b, c)
xs
inpOut1n :: Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n :: Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal (it, ot, [a] -> y)
NullS = Signal (it, Int, [a] -> [y])
forall a. Signal a
NullS
inpOut1n ((it
it, ot
_, [a] -> y
f):-Signal (it, ot, [a] -> y)
xs) = (it
it, Int
1, \[a]
a -> [[a] -> y
f [a]
a]) (it, Int, [a] -> [y])
-> Signal (it, Int, [a] -> [y]) -> Signal (it, Int, [a] -> [y])
forall a. a -> Signal a -> Signal a
:- Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
forall it ot a y.
Signal (it, ot, [a] -> y) -> Signal (it, Int, [a] -> [y])
inpOut1n Signal (it, ot, [a] -> y)
xs
inpOut2n :: Signal (it, ot, [a] -> [b] -> y) -> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n :: Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal (it, ot, [a] -> [b] -> y)
NullS = Signal (it, Int, [a] -> [b] -> [y])
forall a. Signal a
NullS
inpOut2n ((it
it, ot
_, [a] -> [b] -> y
f):-Signal (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])
-> Signal (it, Int, [a] -> [b] -> [y])
-> Signal (it, Int, [a] -> [b] -> [y])
forall a. a -> Signal a -> Signal a
:- Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
forall it ot a b y.
Signal (it, ot, [a] -> [b] -> y)
-> Signal (it, Int, [a] -> [b] -> [y])
inpOut2n Signal (it, ot, [a] -> [b] -> y)
xs
inpOut3n :: Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n :: Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal (it, ot, [a] -> [b] -> [c] -> y)
NullS = Signal (it, Int, [a] -> [b] -> [c] -> [y])
forall a. Signal a
NullS
inpOut3n ((it
it, ot
_, [a] -> [b] -> [c] -> y
f):-Signal (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])
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
forall a. a -> Signal a -> Signal a
:- Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
forall it ot a b c y.
Signal (it, ot, [a] -> [b] -> [c] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [y])
inpOut3n Signal (it, ot, [a] -> [b] -> [c] -> y)
xs
inpOut4n :: Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n :: Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
NullS = Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
forall a. Signal a
NullS
inpOut4n ((it
it, ot
_, [a] -> [b] -> [c] -> [d] -> y
f):-Signal (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])
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
forall a. a -> Signal a -> Signal a
:- Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
forall it ot a b c d y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [y])
inpOut4n Signal (it, ot, [a] -> [b] -> [c] -> [d] -> y)
xs
inpOut5n :: Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n :: Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
NullS = Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
forall a. Signal a
NullS
inpOut5n ((it
it, ot
_, [a] -> [b] -> [c] -> [d] -> [e] -> y
f):-Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
xs) = (it
it, Int
1, \[a]
a [b]
b [c]
c [d]
d [e]
e -> [[a] -> [b] -> [c] -> [d] -> [e] -> y
f [a]
a [b]
b [c]
c [d]
d [e]
e]) (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
forall a. a -> Signal a -> Signal a
:- Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
forall it ot a b c d e y.
Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
-> Signal (it, Int, [a] -> [b] -> [c] -> [d] -> [e] -> [y])
inpOut5n Signal (it, ot, [a] -> [b] -> [c] -> [d] -> [e] -> y)
xs
nextStateFSM :: Int -> (s -> [a] -> s)
-> Signal s -> Signal a -> Signal s
nextStateFSM :: Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
_ s -> [a] -> s
_ Signal s
NullS Signal a
_ = Signal s
forall a. Signal a
NullS
nextStateFSM Int
_ s -> [a] -> s
_ Signal s
_ Signal a
NullS = Signal s
forall a. Signal a
NullS
nextStateFSM Int
c s -> [a] -> s
f Signal s
ss Signal a
as
| Int
c Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0 = [Char] -> Signal s
forall a. HasCallStack => [Char] -> a
error [Char]
"nextStateFSM: Number of consumed tokens must be positive 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
as = Signal s
forall a. Signal a
NullS
| Bool
otherwise = [s] -> Signal s
forall a. [a] -> Signal a
signal [s
next_state] Signal s -> Signal s -> Signal s
forall a. Signal a -> Signal a -> Signal a
+-+ Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
forall s a.
Int -> (s -> [a] -> s) -> Signal s -> Signal a -> Signal s
nextStateFSM Int
c s -> [a] -> s
f (Signal s -> Signal s
forall a. Signal a -> Signal a
tailS Signal s
ss) (Int -> Signal a -> Signal a
forall a. Int -> Signal a -> Signal a
dropS Int
c Signal a
as)
where 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
c Signal a
as
current_state :: s
current_state = Signal s -> s
forall a. Signal a -> a
headS Signal s
ss
next_state :: s
next_state = s -> [a] -> s
f s
current_state [a]
consumed_tokens_as
nextStateFSM2 :: (Int, Int) -> (s -> [a] -> [b] -> s)
-> Signal s -> Signal a -> Signal b -> Signal s
nextStateFSM2 :: (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int, Int)
_ s -> [a] -> [b] -> s
_ Signal s
NullS Signal a
_ Signal b
_ = Signal s
forall a. Signal a
NullS
nextStateFSM2 (Int, Int)
_ s -> [a] -> [b] -> s
_ Signal s
_ Signal a
NullS Signal b
_ = Signal s
forall a. Signal a
NullS
nextStateFSM2 (Int, Int)
_ s -> [a] -> [b] -> s
_ Signal s
_ Signal a
_ Signal b
NullS = Signal s
forall a. Signal a
NullS
nextStateFSM2 (Int
c1, Int
c2) s -> [a] -> [b] -> s
f Signal s
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 s
forall a. HasCallStack => [Char] -> a
error [Char]
"nextStateFSM2: Number of consumed tokens must be positive 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 s
forall a. Signal a
NullS
| Bool
otherwise = [s] -> Signal s
forall a. [a] -> Signal a
signal [s
next_state] Signal s -> Signal s -> Signal s
forall a. Signal a -> Signal a -> Signal a
+-+ (Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
forall s a b.
(Int, Int)
-> (s -> [a] -> [b] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal s
nextStateFSM2 (Int
c1, Int
c2) s -> [a] -> [b] -> s
f (Signal s -> Signal s
forall a. Signal a -> Signal a
tailS Signal s
ss) (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)
where 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
current_state :: s
current_state = Signal s -> s
forall a. Signal a -> a
headS Signal s
ss
next_state :: s
next_state = s -> [a] -> [b] -> s
f s
current_state [a]
consumed_tokens_as [b]
consumed_tokens_bs
nextStateFSM3 :: (Int, Int, Int) -> (s -> [a] -> [b] -> [c] -> s)
-> Signal s -> Signal a -> Signal b -> Signal c -> Signal s
nextStateFSM3 :: (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> s
_ Signal s
NullS Signal a
_ Signal b
_ Signal c
_ = Signal s
forall a. Signal a
NullS
nextStateFSM3 (Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> s
_ Signal s
_ Signal a
NullS Signal b
_ Signal c
_ = Signal s
forall a. Signal a
NullS
nextStateFSM3 (Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> s
_ Signal s
_ Signal a
_ Signal b
NullS Signal c
_ = Signal s
forall a. Signal a
NullS
nextStateFSM3 (Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
NullS = Signal s
forall a. Signal a
NullS
nextStateFSM3 (Int
c1, Int
c2, Int
c3) s -> [a] -> [b] -> [c] -> s
f Signal s
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 s
forall a. HasCallStack => [Char] -> a
error [Char]
"nextStateFSM3: Number of consumed tokens must be positive 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 s
forall a. Signal a
NullS
| Bool
otherwise = [s] -> Signal s
forall a. [a] -> Signal a
signal [s
next_state] Signal s -> Signal s -> Signal s
forall a. Signal a -> Signal a -> Signal a
+-+ (Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
forall s a b c.
(Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal s
nextStateFSM3 (Int
c1, Int
c2, Int
c3) s -> [a] -> [b] -> [c] -> s
f (Signal s -> Signal s
forall a. Signal a -> Signal a
tailS Signal s
ss)
(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)
where 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
current_state :: s
current_state = Signal s -> s
forall a. Signal a -> a
headS Signal s
ss
next_state :: s
next_state = s -> [a] -> [b] -> [c] -> s
f s
current_state [a]
consumed_tokens_as
[b]
consumed_tokens_bs [c]
consumed_tokens_cs
nextStateFSM4 :: (Int, Int, Int, Int) -> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s -> Signal a -> Signal b -> Signal c -> Signal d -> Signal s
nextStateFSM4 :: (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> s
_ Signal s
NullS Signal a
_ Signal b
_ Signal c
_ Signal d
_ = Signal s
forall a. Signal a
NullS
nextStateFSM4 (Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> s
_ Signal s
_ Signal a
NullS Signal b
_ Signal c
_ Signal d
_ = Signal s
forall a. Signal a
NullS
nextStateFSM4 (Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> s
_ Signal s
_ Signal a
_ Signal b
NullS Signal c
_ Signal d
_ = Signal s
forall a. Signal a
NullS
nextStateFSM4 (Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
NullS Signal d
_ = Signal s
forall a. Signal a
NullS
nextStateFSM4 (Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
_ Signal d
NullS = Signal s
forall a. Signal a
NullS
nextStateFSM4 (Int
c1, Int
c2, Int
c3, Int
c4) s -> [a] -> [b] -> [c] -> [d] -> s
f Signal s
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 s
forall a. HasCallStack => [Char] -> a
error [Char]
"nextStateFSM4: Number of consumed tokens must be positive 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 s
forall a. Signal a
NullS
| Bool
otherwise = [s] -> Signal s
forall a. [a] -> Signal a
signal [s
next_state] Signal s -> Signal s -> Signal s
forall a. Signal a -> Signal a -> Signal a
+-+ (Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
forall s a b c d.
(Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal s
nextStateFSM4 (Int
c1, Int
c2, Int
c3, Int
c4) s -> [a] -> [b] -> [c] -> [d] -> s
f (Signal s -> Signal s
forall a. Signal a -> Signal a
tailS Signal s
ss)
(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)
where 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
current_state :: s
current_state = Signal s -> s
forall a. Signal a -> a
headS Signal s
ss
next_state :: s
next_state = s -> [a] -> [b] -> [c] -> [d] -> s
f s
current_state [a]
consumed_tokens_as
[b]
consumed_tokens_bs [c]
consumed_tokens_cs [d]
consumed_tokens_ds
nextStateFSM5 :: (Int, Int, Int, Int, Int) -> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s -> Signal a -> Signal b -> Signal c -> Signal d -> Signal e -> Signal s
nextStateFSM5 :: (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
NullS Signal a
_ Signal b
_ Signal c
_ Signal d
_ Signal e
_ = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
_ Signal a
NullS Signal b
_ Signal c
_ Signal d
_ Signal e
_ = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
_ Signal a
_ Signal b
NullS Signal c
_ Signal d
_ Signal e
_ = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
NullS Signal d
_ Signal e
_ = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
_ Signal d
NullS Signal e
_ = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int, Int, Int, Int, Int)
_ s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
_ Signal s
_ Signal a
_ Signal b
_ Signal c
_ Signal d
_ Signal e
NullS = Signal s
forall a. Signal a
NullS
nextStateFSM5 (Int
c1, Int
c2, Int
c3, Int
c4, Int
c5) s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f Signal s
ss Signal a
as Signal b
bs Signal c
cs Signal d
ds Signal e
es
| 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 Bool -> Bool -> Bool
|| Int
c5 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0
= [Char] -> Signal s
forall a. HasCallStack => [Char] -> a
error [Char]
"nextStateFSM4: Number of consumed tokens must be positive 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)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Signal e -> Bool
forall a t. (Num a, Eq a, Ord a) => a -> Signal t -> Bool
sufficient_tokens Int
c5 Signal e
es) = Signal s
forall a. Signal a
NullS
| Bool
otherwise = [s] -> Signal s
forall a. [a] -> Signal a
signal [s
next_state] Signal s -> Signal s -> Signal s
forall a. Signal a -> Signal a -> Signal a
+-+ (Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
forall s a b c d e.
(Int, Int, Int, Int, Int)
-> (s -> [a] -> [b] -> [c] -> [d] -> [e] -> s)
-> Signal s
-> Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal s
nextStateFSM5 (Int
c1, Int
c2, Int
c3, Int
c4, Int
c5) s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f (Signal s -> Signal s
forall a. Signal a -> Signal a
tailS Signal s
ss)
(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) (Int -> Signal e -> Signal e
forall a. Int -> Signal a -> Signal a
dropS Int
c5 Signal e
es)
where 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
consumed_tokens_es :: [e]
consumed_tokens_es = Signal e -> [e]
forall a. Signal a -> [a]
fromSignal (Signal e -> [e]) -> Signal e -> [e]
forall a b. (a -> b) -> a -> b
$ Int -> Signal e -> Signal e
forall a. Int -> Signal a -> Signal a
takeS Int
c5 Signal e
es
current_state :: s
current_state = Signal s -> s
forall a. Signal a -> a
headS Signal s
ss
next_state :: s
next_state = s -> [a] -> [b] -> [c] -> [d] -> [e] -> s
f s
current_state [a]
consumed_tokens_as
[b]
consumed_tokens_bs [c]
consumed_tokens_cs
[d]
consumed_tokens_ds [e]
consumed_tokens_es
outputFSM :: (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM :: (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [a])
_ Signal s
NullS = Signal a
forall a. Signal a
NullS
outputFSM s -> (Int, [a])
g (s
s:-Signal s
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
y1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p = [Char] -> Signal a
forall a. HasCallStack => [Char] -> a
error [Char]
"outputFSM: Incorrect number of produced tokens."
| Bool
otherwise = [a] -> Signal a
forall a. [a] -> Signal a
signal [a]
y1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ (s -> (Int, [a])) -> Signal s -> Signal a
forall s a. (s -> (Int, [a])) -> Signal s -> Signal a
outputFSM s -> (Int, [a])
g Signal s
ss
where (Int
p, [a]
y1) = s -> (Int, [a])
g s
s
outputFSM2 :: (s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 :: (s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([a], [b]))
_ Signal s
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
outputFSM2 s -> ((Int, Int), ([a], [b]))
g (s
s:-Signal s
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
y1 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]
y2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p2 = [Char] -> (Signal a, Signal b)
forall a. HasCallStack => [Char] -> a
error [Char]
"outputFSM2: Incorrect number of produced tokens."
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
y1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
yr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
y2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
yr2)
where ((Int
p1, Int
p2), ([a]
y1, [b]
y2)) = s -> ((Int, Int), ([a], [b]))
g s
s
(Signal a
yr1, Signal b
yr2) = (s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
forall s a b.
(s -> ((Int, Int), ([a], [b]))) -> Signal s -> (Signal a, Signal b)
outputFSM2 s -> ((Int, Int), ([a], [b]))
g Signal s
ss
outputFSM3 :: (s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 :: (s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([a], [b], [c]))
_ Signal s
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS, Signal c
forall a. Signal a
NullS)
outputFSM3 s -> ((Int, Int, Int), ([a], [b], [c]))
g (s
s:-Signal s
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
y1 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]
y2 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]
y3 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]
"outputFSM3: Incorrect number of produced tokens."
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
y1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
yr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
y2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
yr2, [c] -> Signal c
forall a. [a] -> Signal a
signal [c]
y3 Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ Signal c
yr3)
where ((Int
p1, Int
p2, Int
p3), ([a]
y1, [b]
y2, [c]
y3)) = s -> ((Int, Int, Int), ([a], [b], [c]))
g s
s
(Signal a
yr1, Signal b
yr2, Signal c
yr3) = (s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
forall s a b c.
(s -> ((Int, Int, Int), ([a], [b], [c])))
-> Signal s -> (Signal a, Signal b, Signal c)
outputFSM3 s -> ((Int, Int, Int), ([a], [b], [c]))
g Signal s
ss
outputFSM4 :: (s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 :: (s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([a], [b], [c], [d]))
_ Signal s
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)
outputFSM4 s -> ((Int, Int, Int, Int), ([a], [b], [c], [d]))
g (s
s:-Signal s
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
y1 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]
y2 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]
y3 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]
y4 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]
"outputFSM4: Incorrect number of produced tokens."
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
y1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
yr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
y2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
yr2, [c] -> Signal c
forall a. [a] -> Signal a
signal [c]
y3 Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ Signal c
yr3, [d] -> Signal d
forall a. [a] -> Signal a
signal [d]
y4 Signal d -> Signal d -> Signal d
forall a. Signal a -> Signal a -> Signal a
+-+ Signal d
yr4)
where ((Int
p1, Int
p2, Int
p3, Int
p4), ([a]
y1, [b]
y2, [c]
y3, [d]
y4)) = s -> ((Int, Int, Int, Int), ([a], [b], [c], [d]))
g s
s
(Signal a
yr1, Signal b
yr2, Signal c
yr3, Signal d
yr4) = (s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
forall s a b c d.
(s -> ((Int, Int, Int, Int), ([a], [b], [c], [d])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d)
outputFSM4 s -> ((Int, Int, Int, Int), ([a], [b], [c], [d]))
g Signal s
ss
outputFSM5 :: (s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 :: (s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e]))
_ Signal s
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, Signal e
forall a. Signal a
NullS)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e]))
g (s
s:-Signal s
ss)
| [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
y1 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]
y2 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]
y3 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]
y4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p4 Bool -> Bool -> Bool
|| [e] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [e]
y5 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
p5 = [Char] -> (Signal a, Signal b, Signal c, Signal d, Signal e)
forall a. HasCallStack => [Char] -> a
error [Char]
"outputFSM5: Incorrect number of produced tokens."
| Bool
otherwise = ([a] -> Signal a
forall a. [a] -> Signal a
signal [a]
y1 Signal a -> Signal a -> Signal a
forall a. Signal a -> Signal a -> Signal a
+-+ Signal a
yr1, [b] -> Signal b
forall a. [a] -> Signal a
signal [b]
y2 Signal b -> Signal b -> Signal b
forall a. Signal a -> Signal a -> Signal a
+-+ Signal b
yr2, [c] -> Signal c
forall a. [a] -> Signal a
signal [c]
y3 Signal c -> Signal c -> Signal c
forall a. Signal a -> Signal a -> Signal a
+-+ Signal c
yr3,
[d] -> Signal d
forall a. [a] -> Signal a
signal [d]
y4 Signal d -> Signal d -> Signal d
forall a. Signal a -> Signal a -> Signal a
+-+ Signal d
yr4, [e] -> Signal e
forall a. [a] -> Signal a
signal [e]
y5 Signal e -> Signal e -> Signal e
forall a. Signal a -> Signal a -> Signal a
+-+ Signal e
yr5)
where ((Int
p1, Int
p2, Int
p3, Int
p4, Int
p5),([a]
y1, [b]
y2, [c]
y3, [d]
y4, [e]
y5)) = s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e]))
g s
s
(Signal a
yr1, Signal b
yr2, Signal c
yr3, Signal d
yr4, Signal e
yr5) = (s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
forall s a b c d e.
(s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e])))
-> Signal s -> (Signal a, Signal b, Signal c, Signal d, Signal e)
outputFSM5 s -> ((Int, Int, Int, Int, Int), ([a], [b], [c], [d], [e]))
g Signal s
ss