module Synthesizer.Causal.Arrow where

import qualified Synthesizer.Causal.Process as Causal
import qualified Synthesizer.Generic.Signal as SigG
import Control.Arrow (Arrow, )


class Arrow arrow => C arrow where
   apply ::
      (SigG.Transform sig a, SigG.Transform sig b) =>
      arrow a b -> sig a -> sig b

instance C Causal.T where
   apply = Causal.apply

instance C (->) where
   apply = SigG.map