{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts #-}

module Language.XDsp.Semantics.Extras.Delay (
  Delay (..)
 ,DelayNet (..)
)

where

import Language.XDsp.Semantics.Core
import Control.Applicative

-- ---------------------------------
-- ---------------------------------
-- delay networks

class Dsp repr => Delay repr where
  delaySamp :: ASig repr -> repr (ASig repr)
  vdelay3   :: ASig repr
               -> ASig repr
               -> INum repr
               -> repr (ASig repr)

class Dsp repr => DelayNet repr where
  type DelayN repr :: * -> *
  runDelay :: INum repr -> ASig repr -> DelayN repr a -> repr a
  tapK     :: KSig repr -> DelayN repr (ASig repr)
  tapA     :: ASig repr -> DelayN repr (ASig repr)
  tapI     :: INum repr -> DelayN repr (ASig repr)