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 =
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. a -> a -> T a
Stereo.cons forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow a b
procforall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^forall a. T a -> a
Stereo.left) forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow a b
procforall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^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 =
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. a -> a -> T a
Stereo.cons forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow (c, a) b
proc forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ forall b c a. (b -> c) -> (a, b) -> (a, c)
mapSnd forall a. T a -> a
Stereo.left) forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow (c, a) b
proc forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ forall b c a. (b -> c) -> (a, b) -> (a, c)
mapSnd 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 =
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. a -> a -> T a
Stereo.cons forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
(arrow a b
leftChanforall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^forall a. T a -> a
Stereo.left) forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (arrow a b
rightChanforall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^forall a. T a -> a
Stereo.right)