module Synthesizer.Frame.Stereo (
T, left, right, cons, map,
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 proc =
uncurry Stereo.cons ^<<
(proc<<^Stereo.left) &&& (proc<<^Stereo.right)
arrowFromMonoControlled ::
(Arrow arrow) =>
arrow (c,a) b -> arrow (c, Stereo.T a) (Stereo.T b)
arrowFromMonoControlled proc =
uncurry Stereo.cons ^<<
(proc <<^ mapSnd Stereo.left) &&& (proc <<^ mapSnd Stereo.right)
arrowFromChannels ::
(Arrow arrow) =>
arrow a b -> arrow a b -> arrow (Stereo.T a) (Stereo.T b)
arrowFromChannels leftChan rightChan =
uncurry Stereo.cons ^<<
(leftChan<<^Stereo.left) &&& (rightChan<<^Stereo.right)