{-# LANGUAGE BangPatterns #-}
module Zwirn.Core.Modulate where
import Control.Applicative
import Control.Monad (join)
import Control.Monad.Identity
import Data.Bifunctor
import Data.Fixed (mod')
import Data.Functor (void)
import Music.Theory.Bjorklund (bjorklund, iseq)
import Zwirn.Core.Core
import Zwirn.Core.Time
import Zwirn.Core.Tree
import Zwirn.Core.Types
modulateTime :: (a -> Time -> st -> Time) -> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime :: forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime a -> Time -> st -> Time
f a
x ZwirnT k st i b
b = (Time -> st -> k (Value i b, st)) -> ZwirnT k st i b
forall st (k :: * -> *) i a.
(Time -> st -> k (Value i a, st)) -> ZwirnT k st i a
zwirn (\Time
t st
st -> ZwirnT k st i b -> Time -> st -> k (Value i b, st)
forall (k :: * -> *) st i a.
ZwirnT k st i a -> Time -> st -> k (Value i a, st)
unzwirn ZwirnT k st i b
b (a -> Time -> st -> Time
f a
x Time
t st
st) st
st)
rev :: ZwirnT k st i a -> ZwirnT k st i a
rev :: forall (k :: * -> *) st i a. ZwirnT k st i a -> ZwirnT k st i a
rev = (() -> Time -> st -> Time)
-> () -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (\()
_ Time
t st
_ -> -Time
t) ()
revBy :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
revBy :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
revBy ZwirnT k st i Time
tz ZwirnT k st i a
x = (Time -> Time -> st -> Time)
-> Time -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (\Time
x Time
t st
_ -> Integer -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Time -> Integer
forall b. Integral b => Time -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor Time
x) Time -> Time -> Time
forall a. Num a => a -> a -> a
+ Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
- Time -> Time
forall r. Real r => r -> r
frac Time
x) (Time -> ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i Time
-> ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZwirnT k st i Time
tz ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b. Monad m => m (m a -> m b) -> m a -> m b
<$$> ZwirnT k st i a
x
sini :: ZwirnT k st i a -> ZwirnT k st i a
sini :: forall (k :: * -> *) st i a. ZwirnT k st i a -> ZwirnT k st i a
sini = (() -> Time -> st -> Time)
-> () -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (\()
_ Time
t st
_ -> Time -> Time
forall a. Floating a => a -> a
sin (Time
2 Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
forall a. Floating a => a
pi Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
t)) ()
fast :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
fast :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
fast ZwirnT k st i Time
tz ZwirnT k st i a
x = (Time -> Time -> st -> Time)
-> Time -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (\Time
x Time
t st
_ -> Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
x) (Time -> ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i Time
-> ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZwirnT k st i Time
tz ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b. Monad m => m (m a -> m b) -> m a -> m b
<$$> ZwirnT k st i a
x
slow :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
slow :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
slow ZwirnT k st i Time
tz ZwirnT k st i a
x = (Time -> Time -> st -> Time)
-> Time -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime Time -> Time -> st -> Time
forall {a} {p}. (Eq a, Fractional a) => a -> a -> p -> a
timefunc (Time -> ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i Time
-> ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZwirnT k st i Time
tz ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b. Monad m => m (m a -> m b) -> m a -> m b
<$$> ZwirnT k st i a
x
where
timefunc :: a -> a -> p -> a
timefunc a
x a
t p
_
| a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
0 = a
0
| Bool
otherwise = a
t a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
x
shift :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
shift :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
shift ZwirnT k st i Time
tz ZwirnT k st i a
x = (Time -> Time -> st -> Time)
-> Time -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (\Time
x Time
t st
_ -> Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
- Time
x) (Time -> ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i Time
-> ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZwirnT k st i Time
tz ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b. Monad m => m (m a -> m b) -> m a -> m b
<$$> ZwirnT k st i a
x
ply :: (MultiMonad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
ply :: forall (k :: * -> *) st i a.
MultiMonad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
ply ZwirnT k st i Time
tz = (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b.
MultiMonad m =>
(m a -> m b) -> m a -> m b
squeezeMap (ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
fast ZwirnT k st i Time
tz)
zoom :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
zoom :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time
-> ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
zoom ZwirnT k st i Time
t1 ZwirnT k st i Time
t2 ZwirnT k st i a
x = ((Time, Time) -> Time -> st -> Time)
-> (Time, Time) -> ZwirnT k st i a -> ZwirnT k st i a
forall a st (k :: * -> *) i b.
(a -> Time -> st -> Time)
-> a -> ZwirnT k st i b -> ZwirnT k st i b
modulateTime (Time, Time) -> Time -> st -> Time
forall {a} {p}. Real a => (a, a) -> a -> p -> a
timefunc ((Time, Time) -> ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i (Time, Time)
-> ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZwirnT k st i (Time, Time)
tup ZwirnT k st i (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall (m :: * -> *) a b. Monad m => m (m a -> m b) -> m a -> m b
<$$> ZwirnT k st i a
x
where
tup :: ZwirnT k st i (Time, Time)
tup = (Time -> Time -> (Time, Time))
-> ZwirnT k st i Time
-> ZwirnT k st i Time
-> ZwirnT k st i (Time, Time)
forall a b c.
(a -> b -> c)
-> ZwirnT k st i a -> ZwirnT k st i b -> ZwirnT k st i c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) ZwirnT k st i Time
t1 ZwirnT k st i Time
t2
timefunc :: (a, a) -> a -> p -> a
timefunc (a
st, a
en) a
t p
_
| a
en a -> a -> Bool
forall a. Ord a => a -> a -> Bool
> a
st = a -> a -> a
forall a. Real a => a -> a -> a
mod' a
t (a
en a -> a -> a
forall a. Num a => a -> a -> a
- a
st) a -> a -> a
forall a. Num a => a -> a -> a
+ a
st
| a
en a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
st = a
0
| a
en a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
st = a
st a -> a -> a
forall a. Num a => a -> a -> a
- a -> a -> a
forall a. Real a => a -> a -> a
mod' a
t (a
st a -> a -> a
forall a. Num a => a -> a -> a
- a
en)
timeloop :: (Monad k) => ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
timeloop :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
timeloop = ZwirnT k st i Time
-> ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time
-> ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
zoom (Time -> ZwirnT k st i Time
forall a. a -> ZwirnT k st i a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Time
0)
loopfirst :: (Monad k) => ZwirnT k st i a -> ZwirnT k st i a
loopfirst :: forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i a -> ZwirnT k st i a
loopfirst = ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
timeloop (Time -> ZwirnT k st i Time
forall a. a -> ZwirnT k st i a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Time
1)
fastcat :: (HasSilence k) => [ZwirnT k st i a] -> ZwirnT k st i a
fastcat :: forall (k :: * -> *) st i a.
HasSilence k =>
[ZwirnT k st i a] -> ZwirnT k st i a
fastcat [] = ZwirnT k st i a
forall st i a. ZwirnT k st i a
forall (k :: * -> *) st i a. HasSilence k => ZwirnT k st i a
silence
fastcat [ZwirnT k st i a]
obj = (Time -> st -> k (Value i a, st)) -> ZwirnT k st i a
forall st (k :: * -> *) i a.
(Time -> st -> k (Value i a, st)) -> ZwirnT k st i a
zwirn Time -> st -> k (Value i a, st)
q
where
q :: Time -> st -> k (Value i a, st)
q Time
t = ZwirnT k st i a -> Time -> st -> k (Value i a, st)
forall (k :: * -> *) st i a.
ZwirnT k st i a -> Time -> st -> k (Value i a, st)
unzwirn ZwirnT k st i a
item Time
phase
where
metre :: Time
metre = Int -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Time) -> Int -> Time
forall a b. (a -> b) -> a -> b
$ [ZwirnT k st i a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [ZwirnT k st i a]
obj
scaledPhase :: Time
scaledPhase = Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
metre
item :: ZwirnT k st i a
item = Time -> [ZwirnT k st i a] -> ZwirnT k st i a
forall r a. RealFrac r => r -> [a] -> a
nth Time
scaledPhase [ZwirnT k st i a]
obj
cyc :: Integer
cyc = Time -> Integer
forall b. Integral b => Time -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor Time
t
phase :: Time
phase = Time -> Time
forall r. Real r => r -> r
frac Time
scaledPhase Time -> Time -> Time
forall a. Num a => a -> a -> a
+ Integer -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
cyc
slowcat :: (HasSilence k, Monad k) => [ZwirnT k st i a] -> ZwirnT k st i a
slowcat :: forall (k :: * -> *) st i a.
(HasSilence k, Monad k) =>
[ZwirnT k st i a] -> ZwirnT k st i a
slowcat [ZwirnT k st i a]
zs = ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
slow (Time -> ZwirnT k st i Time
forall a. a -> ZwirnT k st i a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Time -> ZwirnT k st i Time) -> Time -> ZwirnT k st i Time
forall a b. (a -> b) -> a -> b
$ Int -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Time) -> Int -> Time
forall a b. (a -> b) -> a -> b
$ [ZwirnT k st i a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [ZwirnT k st i a]
zs) (ZwirnT k st i a -> ZwirnT k st i a)
-> ZwirnT k st i a -> ZwirnT k st i a
forall a b. (a -> b) -> a -> b
$ [ZwirnT k st i a] -> ZwirnT k st i a
forall (k :: * -> *) st i a.
HasSilence k =>
[ZwirnT k st i a] -> ZwirnT k st i a
fastcat [ZwirnT k st i a]
zs
timecat :: (HasSilence k, Monad k) => [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
timecat :: forall (k :: * -> *) st i a.
(HasSilence k, Monad k) =>
[(Time, ZwirnT k st i a)] -> ZwirnT k st i a
timecat [(Time, ZwirnT k st i a)]
tps = if Time
total Time -> Time -> Bool
forall a. Eq a => a -> a -> Bool
== Time
0 then ZwirnT k st i a
forall st i a. ZwirnT k st i a
forall (k :: * -> *) st i a. HasSilence k => ZwirnT k st i a
silence else [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
forall (k :: * -> *) st i a.
HasSilence k =>
[(Time, ZwirnT k st i a)] -> ZwirnT k st i a
cyclecat [(Time, ZwirnT k st i a)]
normalised
where
total :: Time
total = [Time] -> Time
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Time] -> Time) -> [Time] -> Time
forall a b. (a -> b) -> a -> b
$ ((Time, ZwirnT k st i a) -> Time)
-> [(Time, ZwirnT k st i a)] -> [Time]
forall a b. (a -> b) -> [a] -> [b]
map (Time, ZwirnT k st i a) -> Time
forall a b. (a, b) -> a
fst [(Time, ZwirnT k st i a)]
tps
normalised :: [(Time, ZwirnT k st i a)]
normalised = ((Time, ZwirnT k st i a) -> (Time, ZwirnT k st i a))
-> [(Time, ZwirnT k st i a)] -> [(Time, ZwirnT k st i a)]
forall a b. (a -> b) -> [a] -> [b]
map (\(Time
t, ZwirnT k st i a
p) -> (Time
t Time -> Time -> Time
forall a. Fractional a => a -> a -> a
/ Time
total, ZwirnT k st i a
p)) [(Time, ZwirnT k st i a)]
tps
cyclecat :: (HasSilence k) => [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
cyclecat :: forall (k :: * -> *) st i a.
HasSilence k =>
[(Time, ZwirnT k st i a)] -> ZwirnT k st i a
cyclecat [] = ZwirnT k st i a
forall st i a. ZwirnT k st i a
forall (k :: * -> *) st i a. HasSilence k => ZwirnT k st i a
silence
cyclecat [(Time, ZwirnT k st i a)]
xs = [(Time, ZwirnT k st i a)] -> Time -> ZwirnT k st i a
forall {k :: * -> *} {st} {i} {a}.
HasSilence k =>
[(Time, ZwirnT k st i a)] -> Time -> ZwirnT k st i a
cyclecatrec [(Time, ZwirnT k st i a)]
xs ([Time] -> Time
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Time] -> Time) -> [Time] -> Time
forall a b. (a -> b) -> a -> b
$ ((Time, ZwirnT k st i a) -> Time)
-> [(Time, ZwirnT k st i a)] -> [Time]
forall a b. (a -> b) -> [a] -> [b]
map (Time, ZwirnT k st i a) -> Time
forall a b. (a, b) -> a
fst [(Time, ZwirnT k st i a)]
xs)
where
cyclecatrec :: [(Time, ZwirnT k st i a)] -> Time -> ZwirnT k st i a
cyclecatrec [(Time
_, ZwirnT k st i a
p)] Time
_ = ZwirnT k st i a
p
cyclecatrec ((Time, ZwirnT k st i a)
x : [(Time, ZwirnT k st i a)]
xs) !Time
tot = (Time, ZwirnT k st i a)
-> (Time, ZwirnT k st i a) -> ZwirnT k st i a
forall (k :: * -> *) st i a.
HasSilence k =>
(Time, ZwirnT k st i a)
-> (Time, ZwirnT k st i a) -> ZwirnT k st i a
cat (Time, ZwirnT k st i a)
x (Time
tot Time -> Time -> Time
forall a. Num a => a -> a -> a
- (Time, ZwirnT k st i a) -> Time
forall a b. (a, b) -> a
fst (Time, ZwirnT k st i a)
x, [(Time, ZwirnT k st i a)] -> Time -> ZwirnT k st i a
cyclecatrec [(Time, ZwirnT k st i a)]
xs (Time
tot Time -> Time -> Time
forall a. Num a => a -> a -> a
- (Time, ZwirnT k st i a) -> Time
forall a b. (a, b) -> a
fst (Time, ZwirnT k st i a)
x))
cat :: (HasSilence k) => (Time, ZwirnT k st i a) -> (Time, ZwirnT k st i a) -> ZwirnT k st i a
cat :: forall (k :: * -> *) st i a.
HasSilence k =>
(Time, ZwirnT k st i a)
-> (Time, ZwirnT k st i a) -> ZwirnT k st i a
cat (Time Rational
0 Rational
_, ZwirnT k st i a
_) (Time Rational
0 Rational
_, ZwirnT k st i a
_) = ZwirnT k st i a
forall st i a. ZwirnT k st i a
forall (k :: * -> *) st i a. HasSilence k => ZwirnT k st i a
silence
cat (Time
t1, ZwirnT k st i a
p1) (Time
t2, ZwirnT k st i a
p2) = (Time -> st -> k (Value i a, st)) -> ZwirnT k st i a
forall st (k :: * -> *) i a.
(Time -> st -> k (Value i a, st)) -> ZwirnT k st i a
zwirn Time -> st -> k (Value i a, st)
q
where
q :: Time -> st -> k (Value i a, st)
q Time
t = ZwirnT k st i a -> Time -> st -> k (Value i a, st)
forall (k :: * -> *) st i a.
ZwirnT k st i a -> Time -> st -> k (Value i a, st)
unzwirn ZwirnT k st i a
item Time
phase
where
total :: Time
total = Time
t1 Time -> Time -> Time
forall a. Num a => a -> a -> a
+ Time
t2
cyc :: Time
cyc = Time
t Time -> Time -> Time
forall a. Fractional a => a -> a -> a
/ Time
total
first :: Bool
first = Time -> Time
forall r. Real r => r -> r
frac Time
cyc Time -> Time -> Bool
forall a. Ord a => a -> a -> Bool
< Time
t1 Time -> Time -> Time
forall a. Fractional a => a -> a -> a
/ Time
total
item :: ZwirnT k st i a
item = if Bool
first then ZwirnT k st i a
p1 else ZwirnT k st i a
p2
phase :: Time
phase = if Bool
first then Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
- Integer -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Time -> Integer
forall b. Integral b => Time -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor Time
cyc) Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
t2 else Time
t Time -> Time -> Time
forall a. Num a => a -> a -> a
- (Integer -> Time
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Time -> Integer
forall b. Integral b => Time -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor Time
cyc) Time -> Time -> Time
forall a. Num a => a -> a -> a
+ Time
1) Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
t1
fastcyclecat :: (HasSilence k, Monad k) => [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
fastcyclecat :: forall (k :: * -> *) st i a.
(HasSilence k, Monad k) =>
[(Time, ZwirnT k st i a)] -> ZwirnT k st i a
fastcyclecat [(Time, ZwirnT k st i a)]
xs = [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
forall (k :: * -> *) st i a.
HasSilence k =>
[(Time, ZwirnT k st i a)] -> ZwirnT k st i a
cyclecat ([(Time, ZwirnT k st i a)] -> ZwirnT k st i a)
-> [(Time, ZwirnT k st i a)] -> ZwirnT k st i a
forall a b. (a -> b) -> a -> b
$ ((Time, ZwirnT k st i a) -> (Time, ZwirnT k st i a))
-> [(Time, ZwirnT k st i a)] -> [(Time, ZwirnT k st i a)]
forall a b. (a -> b) -> [a] -> [b]
map (\(Time
t, ZwirnT k st i a
x) -> (Time
t, ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
forall (k :: * -> *) st i a.
Monad k =>
ZwirnT k st i Time -> ZwirnT k st i a -> ZwirnT k st i a
slow (Time -> ZwirnT k st i Time
forall a. a -> ZwirnT k st i a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Time
t) ZwirnT k st i a
x)) [(Time, ZwirnT k st i a)]
xs