module Synthesizer.Frame.Stereo (
T, left, right, cons, map, swap,
arrowFromMono, arrowFromMonoControlled, arrowFromChannels,
Stereo.Channel(Left, Right), Stereo.select,
Stereo.interleave,
Stereo.sequence,
Stereo.liftApplicative,
) where
import Sound.Frame.NumericPrelude.Stereo as Stereo
import Control.Arrow (Arrow, (^<<), (<<^), (&&&), )
import Data.Tuple.HT (mapSnd, )
import Prelude hiding (map, )
arrowFromMono ::
(Arrow arrow) =>
arrow a b -> arrow (Stereo.T a) (Stereo.T b)
arrowFromMono :: forall (arrow :: * -> * -> *) a b.
Arrow arrow =>
arrow a b -> arrow (T a) (T b)
arrowFromMono arrow a b
proc =
(b -> b -> T b) -> (b, b) -> T b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry b -> b -> T b
forall a. a -> a -> T a
Stereo.cons ((b, b) -> T b) -> arrow (T a) (b, b) -> arrow (T a) (T b)
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow a b
procarrow a b -> (T a -> a) -> arrow (T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^T a -> a
forall a. T a -> a
Stereo.left) arrow (T a) b -> arrow (T a) b -> arrow (T a) (b, b)
forall b c c'. arrow b c -> arrow b c' -> arrow b (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow a b
procarrow a b -> (T a -> a) -> arrow (T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^T a -> a
forall a. T a -> a
Stereo.right)
arrowFromMonoControlled ::
(Arrow arrow) =>
arrow (c,a) b -> arrow (c, Stereo.T a) (Stereo.T b)
arrowFromMonoControlled :: forall (arrow :: * -> * -> *) c a b.
Arrow arrow =>
arrow (c, a) b -> arrow (c, T a) (T b)
arrowFromMonoControlled arrow (c, a) b
proc =
(b -> b -> T b) -> (b, b) -> T b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry b -> b -> T b
forall a. a -> a -> T a
Stereo.cons ((b, b) -> T b) -> arrow (c, T a) (b, b) -> arrow (c, T a) (T b)
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow (c, a) b
proc arrow (c, a) b -> ((c, T a) -> (c, a)) -> arrow (c, T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (T a -> a) -> (c, T a) -> (c, a)
forall b c a. (b -> c) -> (a, b) -> (a, c)
mapSnd T a -> a
forall a. T a -> a
Stereo.left) arrow (c, T a) b -> arrow (c, T a) b -> arrow (c, T a) (b, b)
forall b c c'. arrow b c -> arrow b c' -> arrow b (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow (c, a) b
proc arrow (c, a) b -> ((c, T a) -> (c, a)) -> arrow (c, T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (T a -> a) -> (c, T a) -> (c, a)
forall b c a. (b -> c) -> (a, b) -> (a, c)
mapSnd T a -> a
forall a. T a -> a
Stereo.right)
arrowFromChannels ::
(Arrow arrow) =>
arrow a b -> arrow a b -> arrow (Stereo.T a) (Stereo.T b)
arrowFromChannels :: forall (arrow :: * -> * -> *) a b.
Arrow arrow =>
arrow a b -> arrow a b -> arrow (T a) (T b)
arrowFromChannels arrow a b
leftChan arrow a b
rightChan =
(b -> b -> T b) -> (b, b) -> T b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry b -> b -> T b
forall a. a -> a -> T a
Stereo.cons ((b, b) -> T b) -> arrow (T a) (b, b) -> arrow (T a) (T b)
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow a b
leftChanarrow a b -> (T a -> a) -> arrow (T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^T a -> a
forall a. T a -> a
Stereo.left) arrow (T a) b -> arrow (T a) b -> arrow (T a) (b, b)
forall b c c'. arrow b c -> arrow b c' -> arrow b (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow a b
rightChanarrow a b -> (T a -> a) -> arrow (T a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^T a -> a
forall a. T a -> a
Stereo.right)