-- | Monad constructors for demand 'UGen's, see also
-- "Sound.SC3.UGen.Demand.ID".
module Sound.SC3.UGen.Demand.Monad where

import Sound.SC3.UGen.Demand.ID as D
import Sound.SC3.UGen.Enum
import Sound.SC3.UGen.Type
import Sound.SC3.UGen.UId

-- | Buffer demand ugen.
dbufrd :: (UId m) => UGen -> UGen -> Loop -> m UGen
dbufrd = liftUId3 D.dbufrd

-- | Buffer write on demand unit generator.
dbufwr :: (UId m) => UGen -> UGen -> UGen -> Loop -> m UGen
dbufwr = liftUId4 D.dbufwr

-- | Demand rate white noise.
dwhite :: (UId m) => UGen -> UGen -> UGen -> m UGen
dwhite = liftUId3 D.dwhite

-- | Demand rate integer white noise.
diwhite :: (UId m) => UGen -> UGen -> UGen -> m UGen
diwhite = liftUId3 D.diwhite

-- | Demand rate brown noise.
dbrown :: (UId m) => UGen -> UGen -> UGen -> UGen -> m UGen
dbrown = liftUId4 D.dbrown

-- | Demand rate integer brown noise.
dibrown :: (UId m) => UGen -> UGen -> UGen -> UGen -> m UGen
dibrown = liftUId4 D.dibrown

-- | Demand rate random selection.
drand :: (UId m) => UGen -> UGen -> m UGen
drand = liftUId2 D.drand

-- | Demand rate random selection with no immediate repetition.
dxrand :: (UId m) => UGen -> UGen -> m UGen
dxrand = liftUId2 D.dxrand

-- | Demand rate weighted random sequence generator.
dwrand :: (UId m) => UGen -> UGen -> UGen -> m UGen
dwrand = liftUId3 D.dwrand

-- | Demand rate arithmetic series.
dseries :: (UId m) => UGen -> UGen -> UGen -> m UGen
dseries = liftUId3 D.dseries

-- | Demand rate geometric series.
dgeom :: (UId m) => UGen -> UGen -> UGen -> m UGen
dgeom = liftUId3 D.dgeom

-- | Demand rate sequence generator.
dseq :: (UId m) => UGen -> UGen -> m UGen
dseq = liftUId2 D.dseq

-- | Demand rate series generator.
dser :: (UId m) => UGen -> UGen -> m UGen
dser = liftUId2 D.dser

-- | Demand rate sequence shuffler.
dshuf :: (UId m) => UGen -> UGen -> m UGen
dshuf = liftUId2 D.dshuf

-- | Demand input replication
dstutter :: (UId m) => UGen -> UGen -> m UGen
dstutter = liftUId2 D.dstutter

-- | Demand rate input switching.
dswitch1 :: (UId m) => UGen -> UGen -> m UGen
dswitch1 = liftUId2 D.dswitch1

-- | Demand rate input switching.
dswitch :: (UId m) => UGen -> UGen -> m UGen
dswitch = liftUId2 D.dswitch