{-# OPTIONS_HADDOCK hide #-}
module ForSyDe.Shallow.MoC.Synchronous.Lib (
mapSY, zipWithSY, zipWith3SY,
zipWith4SY, mapxSY, zipWithxSY,
combSY, comb2SY, comb3SY, comb4SY,
delaySY, delaynSY,
scanlSY, scanl2SY, scanl3SY, scanldSY, scanld2SY,
scanld3SY, mooreSY, moore2SY, moore3SY, mealySY,
mealy2SY, mealy3SY, sourceSY,
filterSY, fillSY, holdSY,
whenSY, zipSY, zip3SY, zip4SY, zip5SY, zip6SY,
unzipSY, unzip3SY, unzip4SY, unzip5SY, unzip6SY,
zipxSY, unzipxSY,
fstSY, sndSY
) where
import ForSyDe.Shallow.Core
mapSY :: (a -> b) -> Signal a -> Signal b
mapSY :: (a -> b) -> Signal a -> Signal b
mapSY a -> b
_ Signal a
NullS = Signal b
forall a. Signal a
NullS
mapSY a -> b
f (a
x:-Signal a
xs) = a -> b
f a
x b -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:- ((a -> b) -> Signal a -> Signal b
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> b
f Signal a
xs)
zipWithSY :: (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY :: (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY a -> b -> c
_ Signal a
NullS Signal b
_ = Signal c
forall a. Signal a
NullS
zipWithSY a -> b -> c
_ Signal a
_ Signal b
NullS = Signal c
forall a. Signal a
NullS
zipWithSY a -> b -> c
f (a
x:-Signal a
xs) (b
y:-Signal b
ys) = a -> b -> c
f a
x b
y c -> Signal c -> Signal c
forall a. a -> Signal a -> Signal a
:- ((a -> b -> c) -> Signal a -> Signal b -> Signal c
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY a -> b -> c
f Signal a
xs Signal b
ys)
zipWith3SY :: (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY :: (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY a -> b -> c -> d
_ Signal a
NullS Signal b
_ Signal c
_ = Signal d
forall a. Signal a
NullS
zipWith3SY a -> b -> c -> d
_ Signal a
_ Signal b
NullS Signal c
_ = Signal d
forall a. Signal a
NullS
zipWith3SY a -> b -> c -> d
_ Signal a
_ Signal b
_ Signal c
NullS = Signal d
forall a. Signal a
NullS
zipWith3SY a -> b -> c -> d
f (a
x:-Signal a
xs) (b
y:-Signal b
ys) (c
z:-Signal c
zs)
= a -> b -> c -> d
f a
x b
y c
z d -> Signal d -> Signal d
forall a. a -> Signal a -> Signal a
:- ((a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY a -> b -> c -> d
f Signal a
xs Signal b
ys Signal c
zs)
zipWith4SY :: (a -> b -> c -> d -> e) -> Signal a -> Signal b
-> Signal c -> Signal d -> Signal e
zipWith4SY :: (a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY a -> b -> c -> d -> e
_ Signal a
NullS Signal b
_ Signal c
_ Signal d
_ = Signal e
forall a. Signal a
NullS
zipWith4SY a -> b -> c -> d -> e
_ Signal a
_ Signal b
NullS Signal c
_ Signal d
_ = Signal e
forall a. Signal a
NullS
zipWith4SY a -> b -> c -> d -> e
_ Signal a
_ Signal b
_ Signal c
NullS Signal d
_ = Signal e
forall a. Signal a
NullS
zipWith4SY a -> b -> c -> d -> e
_ Signal a
_ Signal b
_ Signal c
_ Signal d
NullS = Signal e
forall a. Signal a
NullS
zipWith4SY a -> b -> c -> d -> e
f (a
w:-Signal a
ws) (b
x:-Signal b
xs) (c
y:-Signal c
ys) (d
z:-Signal d
zs)
= a -> b -> c -> d -> e
f a
w b
x c
y d
z e -> Signal e -> Signal e
forall a. a -> Signal a -> Signal a
:- ((a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
forall a b c d e.
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY a -> b -> c -> d -> e
f Signal a
ws Signal b
xs Signal c
ys Signal d
zs)
combSY :: (a -> b) -> Signal a -> Signal b
combSY :: (a -> b) -> Signal a -> Signal b
combSY = (a -> b) -> Signal a -> Signal b
forall a b. (a -> b) -> Signal a -> Signal b
mapSY
comb2SY :: (a -> b -> c) -> Signal a -> Signal b -> Signal c
comb2SY :: (a -> b -> c) -> Signal a -> Signal b -> Signal c
comb2SY = (a -> b -> c) -> Signal a -> Signal b -> Signal c
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY
comb3SY :: (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
comb3SY :: (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
comb3SY = (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY
comb4SY :: (a -> b -> c -> d -> e) -> Signal a -> Signal b
-> Signal c -> Signal d -> Signal e
comb4SY :: (a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
comb4SY = (a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
forall a b c d e.
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY
mapxSY :: (a -> b) -> Vector (Signal a) -> Vector (Signal b)
mapxSY :: (a -> b) -> Vector (Signal a) -> Vector (Signal b)
mapxSY a -> b
f = (Signal a -> Signal b) -> Vector (Signal a) -> Vector (Signal b)
forall a b. (a -> b) -> Vector a -> Vector b
mapV ((a -> b) -> Signal a -> Signal b
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> b
f)
zipWithxSY :: (Vector a -> b) -> Vector (Signal a) -> Signal b
zipWithxSY :: (Vector a -> b) -> Vector (Signal a) -> Signal b
zipWithxSY Vector a -> b
f = (Vector a -> b) -> Signal (Vector a) -> Signal b
forall a b. (a -> b) -> Signal a -> Signal b
mapSY Vector a -> b
f (Signal (Vector a) -> Signal b)
-> (Vector (Signal a) -> Signal (Vector a))
-> Vector (Signal a)
-> Signal b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector (Signal a) -> Signal (Vector a)
forall a. Vector (Signal a) -> Signal (Vector a)
zipxSY
delaySY :: a
-> Signal a
-> Signal a
delaySY :: a -> Signal a -> Signal a
delaySY a
e Signal a
es = a
ea -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
es
delaynSY :: a
-> Int
-> Signal a
-> Signal a
delaynSY :: a -> Int -> Signal a -> Signal a
delaynSY a
e Int
n Signal a
xs | Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0 = Signal a
xs
| Bool
otherwise = a
e a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:- a -> Int -> Signal a -> Signal a
forall a. a -> Int -> Signal a -> Signal a
delaynSY a
e (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) Signal a
xs
scanlSY :: (a -> b -> a)
-> a
-> Signal b
-> Signal a
scanlSY :: (a -> b -> a) -> a -> Signal b -> Signal a
scanlSY a -> b -> a
f a
mem Signal b
xs = Signal a
s'
where s' :: Signal a
s' = (a -> b -> a) -> Signal a -> Signal b -> Signal a
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY a -> b -> a
f (a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem Signal a
s') Signal b
xs
scanl2SY :: (a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
scanl2SY :: (a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
scanl2SY a -> b -> c -> a
f a
mem Signal b
xs Signal c
ys = Signal a
s'
where s' :: Signal a
s' = (a -> b -> c -> a) -> Signal a -> Signal b -> Signal c -> Signal a
forall a b c d.
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY a -> b -> c -> a
f (a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem Signal a
s') Signal b
xs Signal c
ys
scanl3SY :: (a -> b -> c -> d -> a) -> a -> Signal b
-> Signal c -> Signal d -> Signal a
scanl3SY :: (a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
scanl3SY a -> b -> c -> d -> a
f a
mem Signal b
xs Signal c
ys Signal d
zs = Signal a
s'
where s' :: Signal a
s' = (a -> b -> c -> d -> a)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal a
forall a b c d e.
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY a -> b -> c -> d -> a
f (a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem Signal a
s') Signal b
xs Signal c
ys Signal d
zs
scanldSY :: (a -> b -> a)
-> a
-> Signal b
-> Signal a
scanldSY :: (a -> b -> a) -> a -> Signal b -> Signal a
scanldSY a -> b -> a
f a
mem Signal b
xs = Signal a
s'
where s' :: Signal a
s' = a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem (Signal a -> Signal a) -> Signal a -> Signal a
forall a b. (a -> b) -> a -> b
$ (a -> b -> a) -> Signal a -> Signal b -> Signal a
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY a -> b -> a
f Signal a
s' Signal b
xs
scanld2SY :: (a -> b -> c -> a) -> a -> Signal b -> Signal c
-> Signal a
scanld2SY :: (a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
scanld2SY a -> b -> c -> a
f a
mem Signal b
xs Signal c
ys = Signal a
s'
where s' :: Signal a
s' = a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem (Signal a -> Signal a) -> Signal a -> Signal a
forall a b. (a -> b) -> a -> b
$ (a -> b -> c -> a) -> Signal a -> Signal b -> Signal c -> Signal a
forall a b c d.
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY a -> b -> c -> a
f Signal a
s' Signal b
xs Signal c
ys
scanld3SY :: (a -> b -> c -> d -> a) -> a -> Signal b
-> Signal c -> Signal d -> Signal a
scanld3SY :: (a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
scanld3SY a -> b -> c -> d -> a
f a
mem Signal b
xs Signal c
ys Signal d
zs = Signal a
s'
where s' :: Signal a
s' = a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
mem (Signal a -> Signal a) -> Signal a -> Signal a
forall a b. (a -> b) -> a -> b
$ (a -> b -> c -> d -> a)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal a
forall a b c d e.
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY a -> b -> c -> d -> a
f Signal a
s' Signal b
xs Signal c
ys Signal d
zs
mooreSY :: (a -> b -> a)
-> (a -> c)
-> a
-> Signal b
-> Signal c
mooreSY :: (a -> b -> a) -> (a -> c) -> a -> Signal b -> Signal c
mooreSY a -> b -> a
nextState a -> c
output a
initial
= (a -> c) -> Signal a -> Signal c
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> c
output (Signal a -> Signal c)
-> (Signal b -> Signal a) -> Signal b -> Signal c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((a -> b -> a) -> a -> Signal b -> Signal a
forall a b. (a -> b -> a) -> a -> Signal b -> Signal a
scanldSY a -> b -> a
nextState a
initial)
moore2SY :: (a -> b -> c -> a) -> (a -> d) -> a -> Signal b
-> Signal c -> Signal d
moore2SY :: (a -> b -> c -> a)
-> (a -> d) -> a -> Signal b -> Signal c -> Signal d
moore2SY a -> b -> c -> a
nextState a -> d
output a
initial Signal b
inp1 Signal c
inp2 =
(a -> d) -> Signal a -> Signal d
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> d
output ((a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
forall a b c.
(a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
scanld2SY a -> b -> c -> a
nextState a
initial Signal b
inp1 Signal c
inp2)
moore3SY :: (a -> b -> c -> d -> a) -> (a -> e) -> a -> Signal b
-> Signal c -> Signal d -> Signal e
moore3SY :: (a -> b -> c -> d -> a)
-> (a -> e) -> a -> Signal b -> Signal c -> Signal d -> Signal e
moore3SY a -> b -> c -> d -> a
nextState a -> e
output a
initial Signal b
inp1 Signal c
inp2 Signal d
inp3 =
(a -> e) -> Signal a -> Signal e
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> e
output ((a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
forall a b c d.
(a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
scanld3SY a -> b -> c -> d -> a
nextState a
initial Signal b
inp1 Signal c
inp2 Signal d
inp3)
mealySY :: (a -> b -> a)
-> (a -> b -> c)
-> a
-> Signal b
-> Signal c
mealySY :: (a -> b -> a) -> (a -> b -> c) -> a -> Signal b -> Signal c
mealySY a -> b -> a
nextState a -> b -> c
output a
initial Signal b
sig =
(a -> b -> c) -> Signal a -> Signal b -> Signal c
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY a -> b -> c
output Signal a
state Signal b
sig
where state :: Signal a
state = (a -> b -> a) -> a -> Signal b -> Signal a
forall a b. (a -> b -> a) -> a -> Signal b -> Signal a
scanldSY a -> b -> a
nextState a
initial Signal b
sig
mealy2SY :: (a -> b -> c -> a) -> (a -> b -> c -> d) -> a
-> Signal b -> Signal c -> Signal d
mealy2SY :: (a -> b -> c -> a)
-> (a -> b -> c -> d) -> a -> Signal b -> Signal c -> Signal d
mealy2SY a -> b -> c -> a
nextState a -> b -> c -> d
output a
initial Signal b
inp1 Signal c
inp2 =
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
forall a b c d.
(a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
zipWith3SY a -> b -> c -> d
output ((a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
forall a b c.
(a -> b -> c -> a) -> a -> Signal b -> Signal c -> Signal a
scanld2SY a -> b -> c -> a
nextState a
initial Signal b
inp1 Signal c
inp2) Signal b
inp1 Signal c
inp2
mealy3SY :: (a -> b -> c -> d -> a) -> (a -> b -> c -> d -> e) -> a
-> Signal b -> Signal c -> Signal d -> Signal e
mealy3SY :: (a -> b -> c -> d -> a)
-> (a -> b -> c -> d -> e)
-> a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
mealy3SY a -> b -> c -> d -> a
nextState a -> b -> c -> d -> e
output a
initial Signal b
inp1 Signal c
inp2 Signal d
inp3 =
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
forall a b c d e.
(a -> b -> c -> d -> e)
-> Signal a -> Signal b -> Signal c -> Signal d -> Signal e
zipWith4SY a -> b -> c -> d -> e
output ((a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
forall a b c d.
(a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
scanld3SY a -> b -> c -> d -> a
nextState a
initial Signal b
inp1 Signal c
inp2 Signal d
inp3) Signal b
inp1 Signal c
inp2 Signal d
inp3
filterSY :: (a -> Bool)
-> Signal a
-> Signal (AbstExt a)
filterSY :: (a -> Bool) -> Signal a -> Signal (AbstExt a)
filterSY a -> Bool
_ Signal a
NullS = Signal (AbstExt a)
forall a. Signal a
NullS
filterSY a -> Bool
p (a
x:-Signal a
xs) = if (a -> Bool
p a
x Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
== Bool
True) then
a -> AbstExt a
forall a. a -> AbstExt a
Prst a
x AbstExt a -> Signal (AbstExt a) -> Signal (AbstExt a)
forall a. a -> Signal a -> Signal a
:- (a -> Bool) -> Signal a -> Signal (AbstExt a)
forall a. (a -> Bool) -> Signal a -> Signal (AbstExt a)
filterSY a -> Bool
p Signal a
xs
else
AbstExt a
forall a. AbstExt a
Abst AbstExt a -> Signal (AbstExt a) -> Signal (AbstExt a)
forall a. a -> Signal a -> Signal a
:- (a -> Bool) -> Signal a -> Signal (AbstExt a)
forall a. (a -> Bool) -> Signal a -> Signal (AbstExt a)
filterSY a -> Bool
p Signal a
xs
sourceSY :: (a -> a) -> a -> Signal a
sourceSY :: (a -> a) -> a -> Signal a
sourceSY a -> a
f a
s0 = Signal a
o
where o :: Signal a
o = a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
delaySY a
s0 Signal a
s
s :: Signal a
s = (a -> a) -> Signal a -> Signal a
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> a
f Signal a
o
fillSY :: a
-> Signal (AbstExt a)
-> Signal a
fillSY :: a -> Signal (AbstExt a) -> Signal a
fillSY a
a Signal (AbstExt a)
xs = (AbstExt a -> a) -> Signal (AbstExt a) -> Signal a
forall a b. (a -> b) -> Signal a -> Signal b
mapSY (a -> AbstExt a -> a
forall p. p -> AbstExt p -> p
replaceAbst a
a) Signal (AbstExt a)
xs
where replaceAbst :: p -> AbstExt p -> p
replaceAbst p
a' AbstExt p
Abst = p
a'
replaceAbst p
_ (Prst p
x) = p
x
holdSY :: a
-> Signal (AbstExt a)
-> Signal a
holdSY :: a -> Signal (AbstExt a) -> Signal a
holdSY a
a Signal (AbstExt a)
xs = (a -> AbstExt a -> a) -> a -> Signal (AbstExt a) -> Signal a
forall a b. (a -> b -> a) -> a -> Signal b -> Signal a
scanlSY a -> AbstExt a -> a
forall p. p -> AbstExt p -> p
hold a
a Signal (AbstExt a)
xs
where hold :: p -> AbstExt p -> p
hold p
a' AbstExt p
Abst = p
a'
hold p
_ (Prst p
x) = p
x
whenSY :: Signal (AbstExt a) -> Signal (AbstExt b)
-> Signal (AbstExt a)
whenSY :: Signal (AbstExt a) -> Signal (AbstExt b) -> Signal (AbstExt a)
whenSY Signal (AbstExt a)
NullS Signal (AbstExt b)
_ = Signal (AbstExt a)
forall a. Signal a
NullS
whenSY Signal (AbstExt a)
_ Signal (AbstExt b)
NullS = Signal (AbstExt a)
forall a. Signal a
NullS
whenSY (AbstExt a
_:-Signal (AbstExt a)
xs) (AbstExt b
Abst:-Signal (AbstExt b)
ys) = AbstExt a
forall a. AbstExt a
Abst AbstExt a -> Signal (AbstExt a) -> Signal (AbstExt a)
forall a. a -> Signal a -> Signal a
:- (Signal (AbstExt a) -> Signal (AbstExt b) -> Signal (AbstExt a)
forall a b.
Signal (AbstExt a) -> Signal (AbstExt b) -> Signal (AbstExt a)
whenSY Signal (AbstExt a)
xs Signal (AbstExt b)
ys)
whenSY (AbstExt a
x:-Signal (AbstExt a)
xs) (AbstExt b
_:-Signal (AbstExt b)
ys) = AbstExt a
x AbstExt a -> Signal (AbstExt a) -> Signal (AbstExt a)
forall a. a -> Signal a -> Signal a
:- (Signal (AbstExt a) -> Signal (AbstExt b) -> Signal (AbstExt a)
forall a b.
Signal (AbstExt a) -> Signal (AbstExt b) -> Signal (AbstExt a)
whenSY Signal (AbstExt a)
xs Signal (AbstExt b)
ys)
zipSY :: Signal a -> Signal b -> Signal (a,b)
zipSY :: Signal a -> Signal b -> Signal (a, b)
zipSY (a
x:-Signal a
xs) (b
y:-Signal b
ys) = (a
x, b
y) (a, b) -> Signal (a, b) -> Signal (a, b)
forall a. a -> Signal a -> Signal a
:- Signal a -> Signal b -> Signal (a, b)
forall a b. Signal a -> Signal b -> Signal (a, b)
zipSY Signal a
xs Signal b
ys
zipSY Signal a
_ Signal b
_ = Signal (a, b)
forall a. Signal a
NullS
zip3SY :: Signal a -> Signal b -> Signal c -> Signal (a,b,c)
zip3SY :: Signal a -> Signal b -> Signal c -> Signal (a, b, c)
zip3SY (a
x:-Signal a
xs) (b
y:-Signal b
ys) (c
z:-Signal c
zs) = (a
x, b
y, c
z) (a, b, c) -> Signal (a, b, c) -> Signal (a, b, c)
forall a. a -> Signal a -> Signal a
:- Signal a -> Signal b -> Signal c -> Signal (a, b, c)
forall a b c. Signal a -> Signal b -> Signal c -> Signal (a, b, c)
zip3SY Signal a
xs Signal b
ys Signal c
zs
zip3SY Signal a
_ Signal b
_ Signal c
_ = Signal (a, b, c)
forall a. Signal a
NullS
zip4SY :: Signal a -> Signal b -> Signal c -> Signal d
-> Signal (a,b,c,d)
zip4SY :: Signal a -> Signal b -> Signal c -> Signal d -> Signal (a, b, c, d)
zip4SY (a
w:-Signal a
ws) (b
x:-Signal b
xs) (c
y:-Signal c
ys) (d
z:-Signal d
zs)
= (a
w, b
x, c
y, d
z) (a, b, c, d) -> Signal (a, b, c, d) -> Signal (a, b, c, d)
forall a. a -> Signal a -> Signal a
:- Signal a -> Signal b -> Signal c -> Signal d -> Signal (a, b, c, d)
forall a b c d.
Signal a -> Signal b -> Signal c -> Signal d -> Signal (a, b, c, d)
zip4SY Signal a
ws Signal b
xs Signal c
ys Signal d
zs
zip4SY Signal a
_ Signal b
_ Signal c
_ Signal d
_ = Signal (a, b, c, d)
forall a. Signal a
NullS
zip5SY :: Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> Signal (a,b,c,d,e)
zip5SY :: Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal (a, b, c, d, e)
zip5SY (a
x1:-Signal a
x1s) (b
x2:-Signal b
x2s) (c
x3:-Signal c
x3s) (d
x4:-Signal d
x4s) (e
x5:-Signal e
x5s)
= (a
x1,b
x2,c
x3,d
x4,e
x5) (a, b, c, d, e) -> Signal (a, b, c, d, e) -> Signal (a, b, c, d, e)
forall a. a -> Signal a -> Signal a
:- Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal (a, b, c, d, e)
forall a b c d e.
Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal (a, b, c, d, e)
zip5SY Signal a
x1s Signal b
x2s Signal c
x3s Signal d
x4s Signal e
x5s
zip5SY Signal a
_ Signal b
_ Signal c
_ Signal d
_ Signal e
_ = Signal (a, b, c, d, e)
forall a. Signal a
NullS
zip6SY :: Signal a -> Signal b -> Signal c -> Signal d -> Signal e
-> Signal f -> Signal (a,b,c,d,e,f)
zip6SY :: Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
-> Signal (a, b, c, d, e, f)
zip6SY (a
x1:-Signal a
x1s) (b
x2:-Signal b
x2s) (c
x3:-Signal c
x3s) (d
x4:-Signal d
x4s) (e
x5:-Signal e
x5s) (f
x6:-Signal f
x6s)
= (a
x1,b
x2,c
x3,d
x4,e
x5,f
x6) (a, b, c, d, e, f)
-> Signal (a, b, c, d, e, f) -> Signal (a, b, c, d, e, f)
forall a. a -> Signal a -> Signal a
:- Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
-> Signal (a, b, c, d, e, f)
forall a b c d e f.
Signal a
-> Signal b
-> Signal c
-> Signal d
-> Signal e
-> Signal f
-> Signal (a, b, c, d, e, f)
zip6SY Signal a
x1s Signal b
x2s Signal c
x3s Signal d
x4s Signal e
x5s Signal f
x6s
zip6SY Signal a
_ Signal b
_ Signal c
_ Signal d
_ Signal e
_ Signal f
_ = Signal (a, b, c, d, e, f)
forall a. Signal a
NullS
unzipSY :: Signal (a,b) -> (Signal a,Signal b)
unzipSY :: Signal (a, b) -> (Signal a, Signal b)
unzipSY Signal (a, b)
NullS = (Signal a
forall a. Signal a
NullS, Signal b
forall a. Signal a
NullS)
unzipSY ((a
x, b
y):-Signal (a, b)
xys) = (a
xa -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
xs, b
yb -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:-Signal b
ys)
where (Signal a
xs, Signal b
ys) = Signal (a, b) -> (Signal a, Signal b)
forall a b. Signal (a, b) -> (Signal a, Signal b)
unzipSY Signal (a, b)
xys
unzip3SY :: Signal (a, b, c) -> (Signal a, Signal b, Signal c)
unzip3SY :: Signal (a, b, c) -> (Signal a, Signal b, Signal c)
unzip3SY 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)
unzip3SY ((a
x, b
y, c
z):-Signal (a, b, c)
xyzs) = (a
xa -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
xs, b
yb -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:-Signal b
ys, c
zc -> Signal c -> Signal c
forall a. a -> Signal a -> Signal a
:-Signal c
zs)
where (Signal a
xs, Signal b
ys, Signal c
zs) = Signal (a, b, c) -> (Signal a, Signal b, Signal c)
forall a b c. Signal (a, b, c) -> (Signal a, Signal b, Signal c)
unzip3SY Signal (a, b, c)
xyzs
unzip4SY :: Signal (a,b,c,d)
-> (Signal a,Signal b,Signal c,Signal d)
unzip4SY :: Signal (a, b, c, d) -> (Signal a, Signal b, Signal c, Signal d)
unzip4SY 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)
unzip4SY ((a
w,b
x,c
y,d
z):-Signal (a, b, c, d)
wxyzs) = (a
wa -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
ws, b
xb -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:-Signal b
xs, c
yc -> Signal c -> Signal c
forall a. a -> Signal a -> Signal a
:-Signal c
ys, d
zd -> Signal d -> Signal d
forall a. a -> Signal a -> Signal a
:-Signal d
zs)
where (Signal a
ws, Signal b
xs, Signal c
ys, Signal d
zs) = Signal (a, b, c, d) -> (Signal a, Signal b, Signal c, Signal d)
forall a b c d.
Signal (a, b, c, d) -> (Signal a, Signal b, Signal c, Signal d)
unzip4SY Signal (a, b, c, d)
wxyzs
unzip5SY :: Signal (a,b,c,d,e)
-> (Signal a,Signal b,Signal c,Signal d,Signal e)
unzip5SY :: Signal (a, b, c, d, e)
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SY 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)
unzip5SY ((a
x1,b
x2,c
x3,d
x4,e
x5):-Signal (a, b, c, d, e)
xs) = (a
x1a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
x1s, b
x2b -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:-Signal b
x2s, c
x3c -> Signal c -> Signal c
forall a. a -> Signal a -> Signal a
:-Signal c
x3s, d
x4d -> Signal d -> Signal d
forall a. a -> Signal a -> Signal a
:-Signal d
x4s, e
x5e -> Signal e -> Signal e
forall a. a -> Signal a -> Signal a
:-Signal e
x5s)
where (Signal a
x1s, Signal b
x2s, Signal c
x3s, Signal d
x4s,Signal e
x5s) = Signal (a, b, c, d, e)
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
forall a b c d e.
Signal (a, b, c, d, e)
-> (Signal a, Signal b, Signal c, Signal d, Signal e)
unzip5SY Signal (a, b, c, d, e)
xs
unzip6SY :: Signal (a,b,c,d,e,f)
-> (Signal a,Signal b,Signal c,Signal d,Signal e,Signal f)
unzip6SY :: Signal (a, b, c, d, e, f)
-> (Signal a, Signal b, Signal c, Signal d, Signal e, Signal f)
unzip6SY Signal (a, b, c, d, e, f)
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,Signal f
forall a. Signal a
NullS)
unzip6SY ((a
x1,b
x2,c
x3,d
x4,e
x5,f
x6):-Signal (a, b, c, d, e, f)
xs)
= (a
x1a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:-Signal a
x1s, b
x2b -> Signal b -> Signal b
forall a. a -> Signal a -> Signal a
:-Signal b
x2s, c
x3c -> Signal c -> Signal c
forall a. a -> Signal a -> Signal a
:-Signal c
x3s, d
x4d -> Signal d -> Signal d
forall a. a -> Signal a -> Signal a
:-Signal d
x4s, e
x5e -> Signal e -> Signal e
forall a. a -> Signal a -> Signal a
:-Signal e
x5s, f
x6f -> Signal f -> Signal f
forall a. a -> Signal a -> Signal a
:-Signal f
x6s)
where (Signal a
x1s, Signal b
x2s, Signal c
x3s, Signal d
x4s, Signal e
x5s, Signal f
x6s) = Signal (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 (a, b, c, d, e, f)
-> (Signal a, Signal b, Signal c, Signal d, Signal e, Signal f)
unzip6SY Signal (a, b, c, d, e, f)
xs
zipxSY :: Vector (Signal a) -> Signal (Vector a)
zipxSY :: Vector (Signal a) -> Signal (Vector a)
zipxSY = (Signal (Vector a) -> Signal (Vector a) -> Signal (Vector a))
-> Vector (Signal (Vector a)) -> Signal (Vector a)
forall a. (a -> a -> a) -> Vector a -> a
reduceV ((Vector a -> Vector a -> Vector a)
-> Signal (Vector a) -> Signal (Vector a) -> Signal (Vector a)
forall a b c. (a -> b -> c) -> Signal a -> Signal b -> Signal c
zipWithSY Vector a -> Vector a -> Vector a
forall a. Vector a -> Vector a -> Vector a
(<+>)) (Vector (Signal (Vector a)) -> Signal (Vector a))
-> (Vector (Signal a) -> Vector (Signal (Vector a)))
-> Vector (Signal a)
-> Signal (Vector a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Signal a -> Signal (Vector a))
-> Vector (Signal a) -> Vector (Signal (Vector a))
forall a b. (a -> b) -> Vector a -> Vector b
mapV ((a -> Vector a) -> Signal a -> Signal (Vector a)
forall a b. (a -> b) -> Signal a -> Signal b
mapSY a -> Vector a
forall a. a -> Vector a
unitV)
unzipxSY :: Signal (Vector a) -> Vector (Signal a)
unzipxSY :: Signal (Vector a) -> Vector (Signal a)
unzipxSY Signal (Vector a)
NullS = Vector (Signal a)
forall a. Vector a
NullV
unzipxSY (Vector a
NullV :- Signal (Vector a)
vss) = Signal (Vector a) -> Vector (Signal a)
forall a. Signal (Vector a) -> Vector (Signal a)
unzipxSY Signal (Vector a)
vss
unzipxSY ((a
v:>Vector a
vs) :- Signal (Vector a)
vss) = (a
v a -> Signal a -> Signal a
forall a. a -> Signal a -> Signal a
:- ((Vector a -> a) -> Signal (Vector a) -> Signal a
forall a b. (a -> b) -> Signal a -> Signal b
mapSY Vector a -> a
forall a. Vector a -> a
headV Signal (Vector a)
vss))
Signal a -> Vector (Signal a) -> Vector (Signal a)
forall a. a -> Vector a -> Vector a
:> (Signal (Vector a) -> Vector (Signal a)
forall a. Signal (Vector a) -> Vector (Signal a)
unzipxSY (Vector a
vs Vector a -> Signal (Vector a) -> Signal (Vector a)
forall a. a -> Signal a -> Signal a
:- ((Vector a -> Vector a) -> Signal (Vector a) -> Signal (Vector a)
forall a b. (a -> b) -> Signal a -> Signal b
mapSY Vector a -> Vector a
forall a. Vector a -> Vector a
tailV Signal (Vector a)
vss)))
fstSY :: Signal (a,b) -> Signal a
fstSY :: Signal (a, b) -> Signal a
fstSY = ((a, b) -> a) -> Signal (a, b) -> Signal a
forall a b. (a -> b) -> Signal a -> Signal b
mapSY (a, b) -> a
forall a b. (a, b) -> a
fst
sndSY :: Signal (a,b) -> Signal b
sndSY :: Signal (a, b) -> Signal b
sndSY = ((a, b) -> b) -> Signal (a, b) -> Signal b
forall a b. (a -> b) -> Signal a -> Signal b
mapSY (a, b) -> b
forall a b. (a, b) -> b
snd