diff --git a/csound-expression-opcodes.cabal b/csound-expression-opcodes.cabal
--- a/csound-expression-opcodes.cabal
+++ b/csound-expression-opcodes.cabal
@@ -1,5 +1,5 @@
 Name:          csound-expression-opcodes
-Version:       0.0.0
+Version:       0.0.1
 Cabal-Version: >= 1.6
 License:       BSD3
 License-file:  LICENSE
diff --git a/src/Csound/Typed/Opcode/FLTK.hs b/src/Csound/Typed/Opcode/FLTK.hs
--- a/src/Csound/Typed/Opcode/FLTK.hs
+++ b/src/Csound/Typed/Opcode/FLTK.hs
@@ -143,7 +143,7 @@
 -- >           iwidth, iheight, ix, iy, iopcode [, kp1] [, kp2] [, kp3] [...] [, kpN]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLcount.html>
-flCount :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flCount ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flCount b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcs "FLcount" ([Kr,Ir]
                                                                  ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]
@@ -157,7 +157,7 @@
 -- >           imaxy, iexpx, iexpy, idispx, idispy, iwidth, iheight, ix, iy
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLjoy.html>
-flJoy :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flJoy ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,Sig,D,D)
 flJoy b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unD b12 <*> unD b13
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = mopcs "FLjoy" ([Kr,Kr,Ir,Ir]
                                                                        ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13]
@@ -169,7 +169,7 @@
 -- >           ix, iy [, icursorsize]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLknob.html>
-flKnob :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flKnob ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flKnob b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLknob" ([Kr,Ir]
                                                         ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9]
@@ -183,7 +183,7 @@
 -- >           iwidth, iheight, ix, iy
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLroller.html>
-flRoller :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flRoller ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flRoller b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcs "FLroller" ([Kr,Ir]
                                                                   ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]
@@ -197,7 +197,7 @@
 -- >           iheight, ix, iy
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLslider.html>
-flSlider :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flSlider ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flSlider b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "FLslider" ([Kr,Ir]
                                                               ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]
@@ -211,7 +211,7 @@
 -- >           iheight, ix, iy
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLtext.html>
-flText :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flText ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flText b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLtext" ([Kr,Ir],[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                                ,a2
@@ -249,7 +249,7 @@
 -- >           iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLbutBank.html>
-flButBank :: Tuple a => D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flButBank ::  D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flButBank b1 b2 b3 b4 b5 b6 b7 b8 = dirtyTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8
     where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "FLbutBank" ([Kr,Ir]
                                                         ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8]
@@ -261,7 +261,7 @@
 -- >           iy, iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLbutton.html>
-flButton :: Tuple a => Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flButton ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)
 flButton b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLbutton" ([Kr,Ir]
                                                           ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9]
@@ -417,7 +417,7 @@
 -- > inumsnap, inumval  FLsetsnap  index [, ifn, igroup]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLsetsnap.html>
-flSetsnap :: Tuple a => D -> SE a
+flSetsnap ::  D -> SE (D,D)
 flSetsnap b1 = dirtyTuple $ f <$> unD b1
     where f a1 = mopcs "FLsetsnap" ([Ir,Ir],[Ir,Ir,Ir]) [a1]
 
@@ -614,7 +614,7 @@
 -- >           iwindx_min, iwindx_max, iwindy_min, iwindy_max [, iexpx, iexpy, ioutx, iouty]
 --
 -- csound doc: <http://www.csounds.com/manual/html/FLxyin.html>
-flXyin :: Tuple a => D -> D -> D -> D -> D -> D -> D -> D -> SE a
+flXyin ::  D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,Sig,Sig)
 flXyin b1 b2 b3 b4 b5 b6 b7 b8 = dirtyTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8
     where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "FLxyin" ([Kr,Kr,Kr]
                                                      ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]
diff --git a/src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs b/src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs
--- a/src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs
+++ b/src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs
@@ -42,7 +42,7 @@
 -- > kred, kgreen, kblue  imagegetpixel  iimagenum, kx, ky
 --
 -- csound doc: <http://www.csounds.com/manual/html/imagegetpixel.html>
-imagegetpixel :: Tuple a => D -> Sig -> Sig -> a
+imagegetpixel ::  D -> Sig -> Sig -> (Sig,Sig,Sig)
 imagegetpixel b1 b2 b3 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3
     where f a1 a2 a3 = mopcs "imagegetpixel" ([Kr,Kr,Kr],[Ir,Kr,Kr]) [a1,a2,a3]
 
@@ -91,6 +91,6 @@
 -- > iwidth, iheight  imagesize  iimagenum
 --
 -- csound doc: <http://www.csounds.com/manual/html/imagesize.html>
-imagesize :: Tuple a => D -> a
+imagesize ::  D -> (D,D)
 imagesize b1 = pureTuple $ f <$> unD b1
     where f a1 = mopcs "imagesize" ([Ir,Ir],[Ir]) [a1]
diff --git a/src/Csound/Typed/Opcode/InstrumentControl.hs b/src/Csound/Typed/Opcode/InstrumentControl.hs
--- a/src/Csound/Typed/Opcode/InstrumentControl.hs
+++ b/src/Csound/Typed/Opcode/InstrumentControl.hs
@@ -499,7 +499,7 @@
 -- >           [, istrt] [, iocts] [, iq] [, inptls] [, irolloff] [, iskip]
 --
 -- csound doc: <http://www.csounds.com/manual/html/pitch.html>
-pitch :: Tuple a => Sig -> D -> D -> D -> D -> a
+pitch ::  Sig -> D -> D -> D -> D -> (Sig,Sig)
 pitch b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "pitch" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                               ,a2
@@ -516,7 +516,7 @@
 -- >           [, idowns] [, iexcps] [, irmsmedi]
 --
 -- csound doc: <http://www.csounds.com/manual/html/pitchamdf.html>
-pitchamdf :: Tuple a => Sig -> D -> D -> a
+pitchamdf ::  Sig -> D -> D -> (Sig,Sig)
 pitchamdf b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3
     where f a1 a2 a3 = mopcs "pitchamdf" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]
 
@@ -528,7 +528,7 @@
 -- > acps, alock  plltrack  asig, kd [, kloopf, kloopq, klf, khf, kthresh]
 --
 -- csound doc: <http://www.csounds.com/manual/html/plltrack.html>
-plltrack :: Tuple a => Sig -> Sig -> a
+plltrack ::  Sig -> Sig -> (Sig,Sig)
 plltrack b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2
     where f a1 a2 = mopcs "plltrack" ([Ar,Ar],[Ar,Kr,Kr,Kr,Kr,Kr,Kr]) [a1,a2]
 
@@ -540,7 +540,7 @@
 -- > kcps, kamp  ptrack  asig, ihopsize[,ipeaks]
 --
 -- csound doc: <http://www.csounds.com/manual/html/ptrack.html>
-ptrack :: Tuple a => Sig -> D -> a
+ptrack ::  Sig -> D -> (Sig,Sig)
 ptrack b1 b2 = pureTuple $ f <$> unSig b1 <*> unD b2
     where f a1 a2 = mopcs "ptrack" ([Kr,Kr],[Ar,Ir,Ir]) [a1,a2]
 
@@ -744,7 +744,7 @@
 -- > kx, ky  xyin  iprd, ixmin, ixmax, iymin, iymax [, ixinit] [, iyinit]
 --
 -- csound doc: <http://www.csounds.com/manual/html/xyin.html>
-xyin :: Tuple a => D -> D -> D -> D -> D -> a
+xyin ::  D -> D -> D -> D -> D -> (Sig,Sig)
 xyin b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "xyin" ([Kr,Kr],[Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -916,8 +916,8 @@
 -- > kres  timek  
 --
 -- csound doc: <http://www.csounds.com/manual/html/timek.html>
-timek ::   Sig
-timek  = Sig $ return $ f 
+timek ::   SE Sig
+timek  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f 
     where f  = opcs "timek" [(Ir,[]),(Kr,[])] []
 
 -- | 
@@ -929,6 +929,6 @@
 -- > kres  times  
 --
 -- csound doc: <http://www.csounds.com/manual/html/times.html>
-times ::   Sig
-times  = Sig $ return $ f 
+times ::   SE Sig
+times  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f 
     where f  = opcs "times" [(Ir,[]),(Kr,[])] []
diff --git a/src/Csound/Typed/Opcode/Network.hs b/src/Csound/Typed/Opcode/Network.hs
--- a/src/Csound/Typed/Opcode/Network.hs
+++ b/src/Csound/Typed/Opcode/Network.hs
@@ -53,7 +53,7 @@
 -- > asigl, asigr  sockrecvs  iport, ilength
 --
 -- csound doc: <http://www.csounds.com/manual/html/sockrecv.html>
-sockrecvs :: Tuple a => D -> D -> a
+sockrecvs ::  D -> D -> (Sig,Sig)
 sockrecvs b1 b2 = pureTuple $ f <$> unD b1 <*> unD b2
     where f a1 a2 = mopcs "sockrecvs" ([Ar,Ar],[Ir,Ir]) [a1,a2]
 
diff --git a/src/Csound/Typed/Opcode/PluginHosting.hs b/src/Csound/Typed/Opcode/PluginHosting.hs
--- a/src/Csound/Typed/Opcode/PluginHosting.hs
+++ b/src/Csound/Typed/Opcode/PluginHosting.hs
@@ -86,7 +86,7 @@
 -- > aout1,aout2  vstaudio  instance, [ain1, ain2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vstaudio.html>
-vstaudio :: Tuple a => D -> a
+vstaudio ::  D -> (Sig,Sig)
 vstaudio b1 = pureTuple $ f <$> unD b1
     where f a1 = mopcs "vstaudio" ([Ar,Ar],[Ir,Ar,Ar]) [a1]
 
@@ -99,7 +99,7 @@
 -- > aout1,aout2  vstaudiog  instance, [ain1, ain2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vstaudio.html>
-vstaudiog :: Tuple a => D -> a
+vstaudiog ::  D -> (Sig,Sig)
 vstaudiog b1 = pureTuple $ f <$> unD b1
     where f a1 = mopcs "vstaudiog" ([Ar,Ar],[Ir,Ar,Ar]) [a1]
 
diff --git a/src/Csound/Typed/Opcode/RealtimeMIDI.hs b/src/Csound/Typed/Opcode/RealtimeMIDI.hs
--- a/src/Csound/Typed/Opcode/RealtimeMIDI.hs
+++ b/src/Csound/Typed/Opcode/RealtimeMIDI.hs
@@ -251,8 +251,8 @@
 -- > ival  veloc  [ilow] [, ihigh]
 --
 -- csound doc: <http://www.csounds.com/manual/html/veloc.html>
-veloc ::   D
-veloc  = D $ return $ f 
+veloc ::  Msg -> D
+veloc _  = D $ return $ f 
     where f  = opcs "veloc" [(Ir,[Ir,Ir])] []
 
 -- Output.
@@ -497,7 +497,7 @@
 -- > kstatus, kchan, kdata1, kdata2  midiin  
 --
 -- csound doc: <http://www.csounds.com/manual/html/midiin.html>
-midiin :: Tuple a =>  a
+midiin ::   (Sig,Sig,Sig,Sig)
 midiin  = pureTuple $ return $ f 
     where f  = mopcs "midiin" ([Kr,Kr,Kr,Kr],[]) []
 
diff --git a/src/Csound/Typed/Opcode/SignalGenerators.hs b/src/Csound/Typed/Opcode/SignalGenerators.hs
--- a/src/Csound/Typed/Opcode/SignalGenerators.hs
+++ b/src/Csound/Typed/Opcode/SignalGenerators.hs
@@ -424,7 +424,7 @@
 -- > a1, a2  crossfm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crossfm :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crossfm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crossfm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                           ,a2
@@ -442,7 +442,7 @@
 -- > a1, a2  crossfmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crossfmi :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crossfmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crossfmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                            ,a2
@@ -460,7 +460,7 @@
 -- > a1, a2  crosspm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crosspm :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crosspm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crosspm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                           ,a2
@@ -478,7 +478,7 @@
 -- > a1, a2  crosspmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crosspmi :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crosspmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crosspmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                            ,a2
@@ -496,7 +496,7 @@
 -- > a1, a2  crossfmpm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crossfmpm :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crossfmpm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crossfmpm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                             ,a2
@@ -514,7 +514,7 @@
 -- > a1, a2  crossfmpmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
 --
 -- csound doc: <http://www.csounds.com/manual/html/crossfm.html>
-crossfmpmi :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> a
+crossfmpmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)
 crossfmpmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1
                                                                                              ,a2
@@ -1584,7 +1584,9 @@
 -- > aI3, aV2, aV1  chuap  kL, kR0, kC1, kG, kGa, kGb, kE, kC2, iI3, iV2, iV1, ktime_step
 --
 -- csound doc: <http://www.csounds.com/manual/html/chuap.html>
-chuap :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig -> a
+chuap ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig -> (Sig
+                                                                                        ,Sig
+                                                                                        ,Sig)
 chuap b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unSig b12
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = mopcs "chuap" ([Ar,Ar,Ar]
                                                                    ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Kr]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]
@@ -1711,7 +1713,7 @@
 -- > ax, ay, az  lorenz  ksv, krv, kbv, kh, ix, iy, iz, iskip [, iskipinit]
 --
 -- csound doc: <http://www.csounds.com/manual/html/lorenz.html>
-lorenz :: Tuple a => Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> a
+lorenz ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> (Sig,Sig,Sig)
 lorenz b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8
     where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "lorenz" ([Ar,Ar,Ar],[Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                                ,a2
@@ -1730,7 +1732,7 @@
 -- > kiter, koutrig  mandel   ktrig, kx, ky, kmaxIter
 --
 -- csound doc: <http://www.csounds.com/manual/html/mandel.html>
-mandel :: Tuple a => Sig -> Sig -> Sig -> Sig -> a
+mandel ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)
 mandel b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4
     where f a1 a2 a3 a4 = mopcs "mandel" ([Kr,Kr],[Kr,Kr,Kr,Kr]) [a1,a2,a3,a4]
 
@@ -1791,7 +1793,7 @@
 -- >           [, ifriction] [, iskip]
 --
 -- csound doc: <http://www.csounds.com/manual/html/planet.html>
-planet :: Tuple a => Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> a
+planet ::  Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig)
 planet b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "planet" ([Ar,Ar,Ar]
                                                             ,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]
@@ -1812,7 +1814,8 @@
 -- >         isspread[, irattles, irubbers]
 --
 -- csound doc: <http://www.csounds.com/manual/html/prepiano.html>
-prepiano :: Tuple a => D -> D -> D -> D -> D -> D -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> a
+prepiano ::  D -> D -> D -> D -> D -> D -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig
+                                                                                            ,Sig)
 prepiano b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unD b12 <*> unD b13 <*> unD b14 <*> unD b15
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 = mopcs "prepiano" ([Ar,Ar]
                                                                                   ,[Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
@@ -1976,7 +1979,7 @@
 -- > aphase, asyncout  syncphasor  xcps, asyncin, [, iphs]
 --
 -- csound doc: <http://www.csounds.com/manual/html/syncphasor.html>
-syncphasor :: Tuple a => Sig -> Sig -> a
+syncphasor ::  Sig -> Sig -> (Sig,Sig)
 syncphasor b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2
     where f a1 a2 = mopcs "syncphasor" ([Ar,Ar],[Xr,Ar,Ir]) [a1,a2]
 
@@ -2477,7 +2480,7 @@
 -- >           inumrepeats [, istutterspeed] [, istutterchance] [, ienvchoice]
 --
 -- csound doc: <http://www.csounds.com/manual/html/bbcuts.html>
-bbcuts :: Tuple a => Sig -> Sig -> D -> D -> D -> D -> D -> a
+bbcuts ::  Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig)
 bbcuts b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "bbcuts" ([Ar,Ar],[Ar,Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                             ,a2
@@ -2529,7 +2532,7 @@
 -- > aleft, aright  fluidAllOut  
 --
 -- csound doc: <http://www.csounds.com/manual/html/fluidAllOut.html>
-fluidAllOut :: Tuple a =>  a
+fluidAllOut ::   (Sig,Sig)
 fluidAllOut  = pureTuple $ return $ f 
     where f  = mopcs "fluidAllOut" ([Ar,Ar],[]) []
 
@@ -2625,7 +2628,7 @@
 -- > aleft, aright  fluidOut  ienginenum
 --
 -- csound doc: <http://www.csounds.com/manual/html/fluidOut.html>
-fluidOut :: Tuple a => D -> a
+fluidOut ::  D -> (Sig,Sig)
 fluidOut b1 = pureTuple $ f <$> unD b1
     where f a1 = mopcs "fluidOut" ([Ar,Ar],[Ir]) [a1]
 
@@ -2751,7 +2754,7 @@
 -- > ar1, ar2  lposcilsa  aamp, kfreqratio, kloop, kend, ift [,iphs] 
 --
 -- csound doc: <http://www.csounds.com/manual/html/lposcilsa.html>
-lposcilsa :: Tuple a => Sig -> Sig -> Sig -> Sig -> D -> a
+lposcilsa ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)
 lposcilsa b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "lposcilsa" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -2763,7 +2766,7 @@
 -- > ar1, ar2  lposcilsa2  aamp, kfreqratio, kloop, kend, ift [,iphs] 
 --
 -- csound doc: <http://www.csounds.com/manual/html/lposcilsa2.html>
-lposcilsa2 :: Tuple a => Sig -> Sig -> Sig -> Sig -> D -> a
+lposcilsa2 ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)
 lposcilsa2 b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "lposcilsa2" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -2775,8 +2778,8 @@
 -- >  sfilist  ifilhandle
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfilist.html>
-sfilist ::  Str -> SE ()
-sfilist b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1
+sfilist ::  Sf -> SE ()
+sfilist b1 = SE $ (depT_ =<<) $ lift $ f <$> unSf b1
     where f a1 = opcs "sfilist" [(Xr,[Sr])] [a1]
 
 -- | 
@@ -2788,8 +2791,8 @@
 -- >           [, iflag] [, ioffset]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfinstr.html>
-sfinstr :: Tuple a => D -> D -> Sig -> Sig -> D -> Str -> a
-sfinstr b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unStr b6
+sfinstr ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)
+sfinstr b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6
     where f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1
                                                                                     ,a2
                                                                                     ,a3
@@ -2806,8 +2809,8 @@
 -- >           [, iflag] [, ioffset]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfinstr3.html>
-sfinstr3 :: Tuple a => D -> D -> Sig -> Sig -> D -> Str -> a
-sfinstr3 b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unStr b6
+sfinstr3 ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)
+sfinstr3 b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6
     where f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1
                                                                                      ,a2
                                                                                      ,a3
@@ -2824,8 +2827,8 @@
 -- >           [, iflag] [, ioffset]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfinstr3m.html>
-sfinstr3m ::  D -> D -> Sig -> Sig -> D -> Str -> Sig
-sfinstr3m b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unStr b6
+sfinstr3m ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig
+sfinstr3m b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6
     where f a1 a2 a3 a4 a5 a6 = opcs "sfinstr3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1
                                                                                   ,a2
                                                                                   ,a3
@@ -2842,8 +2845,8 @@
 -- >           [, iflag] [, ioffset]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfinstrm.html>
-sfinstrm ::  D -> D -> Sig -> Sig -> D -> Str -> Sig
-sfinstrm b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unStr b6
+sfinstrm ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig
+sfinstrm b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6
     where f a1 a2 a3 a4 a5 a6 = opcs "sfinstrm" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]
 
 -- | 
@@ -2871,8 +2874,8 @@
 -- >           [, istart, imode, ifenv, iskip] 
 --
 -- csound doc: <http://www.csounds.com/manual/html/sflooper.html>
-sflooper :: Tuple a => D -> D -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> a
-sflooper b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unSig b8
+sflooper ::  D -> D -> Sig -> Sig -> Sf -> Sig -> Sig -> Sig -> (Sig,Sig)
+sflooper b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5 <*> unSig b6 <*> unSig b7 <*> unSig b8
     where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "sflooper" ([Ar,Ar]
                                                        ,[Ir,Ir,Kr,Kr,Ir,Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]
 
@@ -2891,8 +2894,8 @@
 -- >  sfpassign  istartindex, ifilhandle[, imsgs]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfpassign.html>
-sfpassign ::  D -> Str -> SE ()
-sfpassign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unStr b2
+sfpassign ::  D -> Sf -> SE ()
+sfpassign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSf b2
     where f a1 a2 = opcs "sfpassign" [(Xr,[Ir,Sr,Ir])] [a1,a2]
 
 -- | 
@@ -2903,8 +2906,8 @@
 -- > ar1, ar2  sfplay  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfplay.html>
-sfplay :: Tuple a => D -> D -> Sig -> Sig -> D -> a
-sfplay b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5
+sfplay ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)
+sfplay b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5
     where f a1 a2 a3 a4 a5 = mopcs "sfplay" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
 -- | 
@@ -2915,8 +2918,8 @@
 -- > ar1, ar2  sfplay3  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfplay3.html>
-sfplay3 :: Tuple a => D -> D -> Sig -> Sig -> D -> a
-sfplay3 b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5
+sfplay3 ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)
+sfplay3 b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5
     where f a1 a2 a3 a4 a5 = mopcs "sfplay3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
 -- | 
@@ -2927,8 +2930,8 @@
 -- > ares  sfplay3m  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfplay3m.html>
-sfplay3m ::  D -> D -> Sig -> Sig -> D -> Sig
-sfplay3m b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5
+sfplay3m ::  D -> D -> Sig -> Sig -> Sf -> Sig
+sfplay3m b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5
     where f a1 a2 a3 a4 a5 = opcs "sfplay3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]
 
 -- | 
@@ -2939,8 +2942,8 @@
 -- > ares  sfplaym  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfplaym.html>
-sfplaym ::  D -> D -> Sig -> Sig -> D -> Sig
-sfplaym b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5
+sfplaym ::  D -> D -> Sig -> Sig -> Sf -> Sig
+sfplaym b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5
     where f a1 a2 a3 a4 a5 = opcs "sfplaym" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]
 
 -- | 
@@ -2951,8 +2954,8 @@
 -- >  sfplist  ifilhandle
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfplist.html>
-sfplist ::  Str -> SE ()
-sfplist b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1
+sfplist ::  Sf -> SE ()
+sfplist b1 = SE $ (depT_ =<<) $ lift $ f <$> unSf b1
     where f a1 = opcs "sfplist" [(Xr,[Sr])] [a1]
 
 -- | 
@@ -2963,8 +2966,8 @@
 -- > ir  sfpreset  iprog, ibank, ifilhandle, ipreindex
 --
 -- csound doc: <http://www.csounds.com/manual/html/sfpreset.html>
-sfpreset ::  D -> D -> Str -> D -> D
-sfpreset b1 b2 b3 b4 = D $ f <$> unD b1 <*> unD b2 <*> unStr b3 <*> unD b4
+sfpreset ::  D -> D -> Sf -> Sf -> D
+sfpreset b1 b2 b3 b4 = D $ f <$> unD b1 <*> unD b2 <*> unSf b3 <*> unSf b4
     where f a1 a2 a3 a4 = opcs "sfpreset" [(Ir,[Ir,Ir,Sr,Ir])] [a1,a2,a3,a4]
 
 -- | 
@@ -2977,7 +2980,7 @@
 -- > asig, krec  sndloop  ain, kpitch, ktrig, idur, ifad
 --
 -- csound doc: <http://www.csounds.com/manual/html/sndloop.html>
-sndloop :: Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+sndloop ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)
 sndloop b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "sndloop" ([Ar,Kr],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -3068,7 +3071,7 @@
 -- > kpos, kvel  xscanmap  iscan, kamp, kvamp [, iwhich]
 --
 -- csound doc: <http://www.csounds.com/manual/html/xscanmap.html>
-xscanmap :: Tuple a => D -> Sig -> Sig -> a
+xscanmap ::  D -> Sig -> Sig -> (Sig,Sig)
 xscanmap b1 b2 b3 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3
     where f a1 a2 a3 = mopcs "xscanmap" ([Kr,Kr],[Ir,Kr,Kr,Ir]) [a1,a2,a3]
 
diff --git a/src/Csound/Typed/Opcode/SignalIO.hs b/src/Csound/Typed/Opcode/SignalIO.hs
--- a/src/Csound/Typed/Opcode/SignalIO.hs
+++ b/src/Csound/Typed/Opcode/SignalIO.hs
@@ -221,7 +221,7 @@
 -- > kr1, kr2  readk2  ifilname, iformat, iprd
 --
 -- csound doc: <http://www.csounds.com/manual/html/readk2.html>
-readk2 :: Tuple a => Str -> D -> D -> a
+readk2 ::  Str -> D -> D -> (Sig,Sig)
 readk2 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3
     where f a1 a2 a3 = mopcs "readk2" ([Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]
 
@@ -231,7 +231,7 @@
 -- > kr1, kr2, kr3  readk3  ifilname, iformat, iprd
 --
 -- csound doc: <http://www.csounds.com/manual/html/readk3.html>
-readk3 :: Tuple a => Str -> D -> D -> a
+readk3 ::  Str -> D -> D -> (Sig,Sig,Sig)
 readk3 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3
     where f a1 a2 a3 = mopcs "readk3" ([Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]
 
@@ -241,7 +241,7 @@
 -- > kr1, kr2, kr3, kr4  readk4  ifilname, iformat, iprd
 --
 -- csound doc: <http://www.csounds.com/manual/html/readk4.html>
-readk4 :: Tuple a => Str -> D -> D -> a
+readk4 ::  Str -> D -> D -> (Sig,Sig,Sig,Sig)
 readk4 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3
     where f a1 a2 a3 = mopcs "readk4" ([Kr,Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]
 
@@ -371,7 +371,7 @@
 -- > ar1, ar2,  ar3, a4  inq  
 --
 -- csound doc: <http://www.csounds.com/manual/html/inq.html>
-inq :: Tuple a =>  a
+inq ::   (Sig,Sig,Sig,Sig)
 inq  = pureTuple $ return $ f 
     where f  = mopcs "inq" ([Ar,Ar,Ar,Ar],[]) []
 
@@ -393,7 +393,7 @@
 -- > ar1, ar2  ins  
 --
 -- csound doc: <http://www.csounds.com/manual/html/ins.html>
-ins :: Tuple a =>  a
+ins ::   (Sig,Sig)
 ins  = pureTuple $ return $ f 
     where f  = mopcs "ins" ([Ar,Ar],[]) []
 
@@ -437,7 +437,7 @@
 -- > ar1, ar2  mp3in  ifilcod[, iskptim, iformat, iskipinit, ibufsize]
 --
 -- csound doc: <http://www.csounds.com/manual/html/mp3in.html>
-mp3in :: Tuple a => Str -> a
+mp3in ::  Str -> (Sig,Sig)
 mp3in b1 = pureTuple $ f <$> unStr b1
     where f a1 = mopcs "mp3in" ([Ar,Ar],[Sr,Ir,Ir,Ir,Ir]) [a1]
 
diff --git a/src/Csound/Typed/Opcode/SignalModifiers.hs b/src/Csound/Typed/Opcode/SignalModifiers.hs
--- a/src/Csound/Typed/Opcode/SignalModifiers.hs
+++ b/src/Csound/Typed/Opcode/SignalModifiers.hs
@@ -391,7 +391,7 @@
 -- > aout1, aout2, aout3, aout4  vdelayxq  ain1, ain2, ain3, ain4, adl, imd, iws [, ist]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vdelayxq.html>
-vdelayxq :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> a
+vdelayxq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)
 vdelayxq b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1
                                                                                               ,a2
@@ -407,7 +407,7 @@
 -- > aout1, aout2  vdelayxs  ain1, ain2, adl, imd, iws [, ist]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vdelayxs.html>
-vdelayxs :: Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+vdelayxs ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)
 vdelayxs b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "vdelayxs" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -428,7 +428,7 @@
 -- >           imd, iws [, ist]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vdelayxwq.html>
-vdelayxwq :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> a
+vdelayxwq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)
 vdelayxwq b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxwq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1
                                                                                                ,a2
@@ -444,7 +444,7 @@
 -- > aout1, aout2  vdelayxws  ain1, ain2, adl, imd, iws [, ist]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vdelayxws.html>
-vdelayxws :: Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+vdelayxws ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)
 vdelayxws b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "vdelayxws" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -588,7 +588,7 @@
 -- > aleft, aright  hrtfmove  asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr]
 --
 -- csound doc: <http://www.csounds.com/manual/html/hrtfmove.html>
-hrtfmove :: Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+hrtfmove ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)
 hrtfmove b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "hrtfmove" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -602,7 +602,7 @@
 -- > aleft, aright  hrtfmove2  asrc, kAz, kElev, ifilel, ifiler [,ioverlap, iradius, isr]
 --
 -- csound doc: <http://www.csounds.com/manual/html/hrtfmove2.html>
-hrtfmove2 :: Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+hrtfmove2 ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)
 hrtfmove2 b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "hrtfmove2" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -614,7 +614,7 @@
 -- > aleft, aright, idel  hrtfreverb  asrc, ilowrt60, ihighrt60, ifilel, ifiler [,isr, imfp, iorder]
 --
 -- csound doc: <http://www.csounds.com/manual/html/hrtfreverb.html>
-hrtfreverb :: Tuple a => Sig -> D -> D -> D -> D -> a
+hrtfreverb ::  Sig -> D -> D -> D -> D -> (Sig,Sig,D)
 hrtfreverb b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "hrtfreverb" ([Ar,Ar,Ir],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                        ,a2
@@ -634,7 +634,7 @@
 -- >         
 --
 -- csound doc: <http://www.csounds.com/manual/html/hrtfstat.html>
-hrtfstat :: Tuple a => Sig -> D -> D -> D -> D -> a
+hrtfstat ::  Sig -> D -> D -> D -> D -> (Sig,Sig)
 hrtfstat b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5
     where f a1 a2 a3 a4 a5 = mopcs "hrtfstat" ([Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]
 
@@ -647,7 +647,7 @@
 -- > a1, a2,  a3, a4  locsend  
 --
 -- csound doc: <http://www.csounds.com/manual/html/locsend.html>
-locsend :: Tuple a =>  a
+locsend ::   (Sig,Sig,Sig,Sig)
 locsend  = pureTuple $ return $ f 
     where f  = mopcs "locsend" ([Ar,Ar,Ar,Ar],[]) []
 
@@ -660,7 +660,7 @@
 -- > a1, a2,  a3, a4  locsig  asig, kdegree, kdistance, kreverbsend
 --
 -- csound doc: <http://www.csounds.com/manual/html/locsig.html>
-locsig :: Tuple a => Sig -> Sig -> Sig -> Sig -> a
+locsig ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)
 locsig b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4
     where f a1 a2 a3 a4 = mopcs "locsig" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2,a3,a4]
 
@@ -672,7 +672,7 @@
 -- > a1, a2, a3, a4  pan  asig, kx, ky, ifn [, imode] [, ioffset]
 --
 -- csound doc: <http://www.csounds.com/manual/html/pan.html>
-pan :: Tuple a => Sig -> Sig -> Sig -> Tab -> a
+pan ::  Sig -> Sig -> Sig -> Tab -> (Sig,Sig,Sig,Sig)
 pan b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4
     where f a1 a2 a3 a4 = mopcs "pan" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]
 
@@ -684,7 +684,7 @@
 -- > a1, a2  pan2  asig, xp [, imode]
 --
 -- csound doc: <http://www.csounds.com/manual/html/pan2.html>
-pan2 :: Tuple a => Sig -> Sig -> a
+pan2 ::  Sig -> Sig -> (Sig,Sig)
 pan2 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2
     where f a1 a2 = mopcs "pan2" ([Ar,Ar],[Ar,Xr,Ir]) [a1,a2]
 
@@ -696,7 +696,7 @@
 -- > a1, a2, a3, a4   space  asig, ifn, ktime, kreverbsend, kx, ky
 --
 -- csound doc: <http://www.csounds.com/manual/html/space.html>
-space :: Tuple a => Sig -> Tab -> Sig -> Sig -> Sig -> Sig -> a
+space ::  Sig -> Tab -> Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)
 space b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unSig b1 <*> unTab b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6
     where f a1 a2 a3 a4 a5 a6 = mopcs "space" ([Ar,Ar,Ar,Ar],[Ar,Ir,Kr,Kr,Kr,Kr]) [a1
                                                                                   ,a2
@@ -713,7 +713,7 @@
 -- > aW, aX, aY, aZ  spat3d  ain, kX, kY, kZ, idist, ift, imode, imdel, iovr [, istor]
 --
 -- csound doc: <http://www.csounds.com/manual/html/spat3d.html>
-spat3d :: Tuple a => Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> a
+spat3d ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)
 spat3d b1 b2 b3 b4 b5 b6 b7 b8 b9 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9
     where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "spat3d" ([Ar,Ar,Ar,Ar]
                                                         ,[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9]
@@ -726,7 +726,7 @@
 -- > aW, aX, aY, aZ  spat3di  ain, iX, iY, iZ, idist, ift, imode [, istor]
 --
 -- csound doc: <http://www.csounds.com/manual/html/spat3di.html>
-spat3di :: Tuple a => Sig -> D -> D -> D -> D -> D -> D -> a
+spat3di ::  Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)
 spat3di b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "spat3di" ([Ar,Ar,Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                              ,a2
@@ -775,7 +775,7 @@
 -- > a1, a2, a3, a4  spsend  
 --
 -- csound doc: <http://www.csounds.com/manual/html/spsend.html>
-spsend :: Tuple a =>  a
+spsend ::   (Sig,Sig,Sig,Sig)
 spsend  = pureTuple $ return $ f 
     where f  = mopcs "spsend" ([Ar,Ar,Ar,Ar],[]) []
 
@@ -822,7 +822,7 @@
 -- > ar1, ar2, ar3, ar4  vbap4  asig, kazim [, kelev] [, kspread]
 --
 -- csound doc: <http://www.csounds.com/manual/html/vbap4.html>
-vbap4 :: Tuple a => Sig -> Sig -> a
+vbap4 ::  Sig -> Sig -> (Sig,Sig,Sig,Sig)
 vbap4 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2
     where f a1 a2 = mopcs "vbap4" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2]
 
@@ -944,7 +944,7 @@
 -- > a1, a2  babo  asig, ksrcx, ksrcy, ksrcz, irx, iry, irz [, idiff] [, ifno]
 --
 -- csound doc: <http://www.csounds.com/manual/html/babo.html>
-babo :: Tuple a => Sig -> Sig -> Sig -> Sig -> D -> D -> D -> a
+babo ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> (Sig,Sig)
 babo b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7
     where f a1 a2 a3 a4 a5 a6 a7 = mopcs "babo" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1
                                                                                        ,a2
@@ -989,7 +989,7 @@
 -- > aoutL, aoutR  freeverb  ainL, ainR, kRoomSize, kHFDamp[, iSRate[, iSkip]] 
 --
 -- csound doc: <http://www.csounds.com/manual/html/freeverb.html>
-freeverb :: Tuple a => Sig -> Sig -> Sig -> Sig -> a
+freeverb ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)
 freeverb b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4
     where f a1 a2 a3 a4 = mopcs "freeverb" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4]
 
@@ -1064,7 +1064,7 @@
 -- > aoutL, aoutR  reverbsc  ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]] 
 --
 -- csound doc: <http://www.csounds.com/manual/html/reverbsc.html>
-reverbsc :: Tuple a => Sig -> Sig -> Sig -> Sig -> a
+reverbsc ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)
 reverbsc b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4
     where f a1 a2 a3 a4 = mopcs "reverbsc" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]
 
@@ -1787,7 +1787,7 @@
 -- > ahp,alp,abp,abr  statevar  ain, kcf, kq [, iosamps, istor]
 --
 -- csound doc: <http://www.csounds.com/manual/html/statevar.html>
-statevar :: Tuple a => Sig -> Sig -> Sig -> a
+statevar ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)
 statevar b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3
     where f a1 a2 a3 = mopcs "statevar" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3]
 
@@ -1799,7 +1799,7 @@
 -- > alow, ahigh, aband  svfilter   asig, kcf, kq [, iscl]
 --
 -- csound doc: <http://www.csounds.com/manual/html/svfilter.html>
-svfilter :: Tuple a => Sig -> Sig -> Sig -> a
+svfilter ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig)
 svfilter b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3
     where f a1 a2 a3 = mopcs "svfilter" ([Ar,Ar,Ar],[Ar,Kr,Kr,Ir]) [a1,a2,a3]
 
@@ -2006,7 +2006,7 @@
 -- > ar1, ar2  hilbert  asig
 --
 -- csound doc: <http://www.csounds.com/manual/html/hilbert.html>
-hilbert :: Tuple a => Sig -> a
+hilbert ::  Sig -> (Sig,Sig)
 hilbert b1 = pureTuple $ f <$> unSig b1
     where f a1 = mopcs "hilbert" ([Ar,Ar],[Ar]) [a1]
 
diff --git a/src/Csound/Typed/Opcode/SpectralProcessing.hs b/src/Csound/Typed/Opcode/SpectralProcessing.hs
--- a/src/Csound/Typed/Opcode/SpectralProcessing.hs
+++ b/src/Csound/Typed/Opcode/SpectralProcessing.hs
@@ -115,7 +115,7 @@
 -- > kfreq, kamp  pvread  ktimpnt, ifile, ibin
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvread.html>
-pvread :: Tuple a => Sig -> Str -> D -> a
+pvread ::  Sig -> Str -> D -> (Sig,Sig)
 pvread b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unStr b2 <*> unD b3
     where f a1 a2 a3 = mopcs "pvread" ([Kr,Kr],[Kr,Sr,Ir]) [a1,a2,a3]
 
@@ -181,7 +181,7 @@
 -- > krmsr, krmso, kerr, kcps  lpread  ktimpnt, ifilcod [, inpoles] [, ifrmrate]
 --
 -- csound doc: <http://www.csounds.com/manual/html/lpread.html>
-lpread :: Tuple a => Sig -> Str -> a
+lpread ::  Sig -> Str -> (Sig,Sig,Sig,Sig)
 lpread b1 b2 = pureTuple $ f <$> unSig b1 <*> unStr b2
     where f a1 a2 = mopcs "lpread" ([Kr,Kr,Kr,Kr],[Kr,Sr,Ir,Ir]) [a1,a2]
 
@@ -266,7 +266,7 @@
 -- >           irolloff [, iodd] [, iconfs] [, interp] [, ifprd] [, iwtflg]
 --
 -- csound doc: <http://www.csounds.com/manual/html/specptrk.html>
-specptrk :: Tuple a => Wspec -> Sig -> D -> D -> D -> D -> D -> D -> a
+specptrk ::  Wspec -> Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig)
 specptrk b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unWspec b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8
     where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "specptrk" ([Kr,Kr]
                                                        ,[Wr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]
@@ -414,7 +414,7 @@
 -- > kamp, kfr  pvsbin  fsig, kbin
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvsbin.html>
-pvsbin :: Tuple a => Spec -> Sig -> a
+pvsbin ::  Spec -> Sig -> (Sig,Sig)
 pvsbin b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2
     where f a1 a2 = mopcs "pvsbin" ([Kr,Kr],[Fr,Kr]) [a1,a2]
 
@@ -445,7 +445,7 @@
 -- > ihandle, ktime   pvsbuffer  fsig, ilen 
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvsbuffer.html>
-pvsbuffer :: Tuple a => Spec -> D -> a
+pvsbuffer ::  Spec -> D -> (D,Sig)
 pvsbuffer b1 b2 = pureTuple $ f <$> unSpec b1 <*> unD b2
     where f a1 a2 = mopcs "pvsbuffer" ([Ir,Kr],[Fr,Ir]) [a1,a2]
 
@@ -668,7 +668,7 @@
 -- > ffr,fphs  pvsifd  ain, ifftsize, ihopsize, iwintype[,iscal]
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvsifd.html>
-pvsifd :: Tuple a => Sig -> D -> D -> D -> a
+pvsifd ::  Sig -> D -> D -> D -> (Spec,Spec)
 pvsifd b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4
     where f a1 a2 a3 a4 = mopcs "pvsifd" ([Fr,Fr],[Ar,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]
 
@@ -696,7 +696,7 @@
 -- > ioverlap, inumbins, iwinsize, iformat  pvsinfo  fsrc
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvsinfo.html>
-pvsinfo :: Tuple a => Spec -> a
+pvsinfo ::  Spec -> (D,D,D,D)
 pvsinfo b1 = pureTuple $ f <$> unSpec b1
     where f a1 = mopcs "pvsinfo" ([Ir,Ir,Ir,Ir],[Fr]) [a1]
 
@@ -817,7 +817,7 @@
 -- > kfr, kamp  pvspitch  fsig, kthresh
 --
 -- csound doc: <http://www.csounds.com/manual/html/pvspitch.html>
-pvspitch :: Tuple a => Spec -> Sig -> a
+pvspitch ::  Spec -> Sig -> (Sig,Sig)
 pvspitch b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2
     where f a1 a2 = mopcs "pvspitch" ([Kr,Kr],[Fr,Kr]) [a1,a2]
 
@@ -967,7 +967,7 @@
 -- > fsig, kfr, kamp  trhighest  fin1, kscal
 --
 -- csound doc: <http://www.csounds.com/manual/html/trhighest.html>
-trhighest :: Tuple a => Spec -> Sig -> a
+trhighest ::  Spec -> Sig -> (Spec,Sig,Sig)
 trhighest b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2
     where f a1 a2 = mopcs "trhighest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]
 
@@ -982,7 +982,7 @@
 -- > fsig, kfr, kamp  trlowest  fin1, kscal
 --
 -- csound doc: <http://www.csounds.com/manual/html/trlowest.html>
-trlowest :: Tuple a => Spec -> Sig -> a
+trlowest ::  Spec -> Sig -> (Spec,Sig,Sig)
 trlowest b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2
     where f a1 a2 = mopcs "trlowest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]
 
@@ -1045,7 +1045,7 @@
 -- > fsiglow, fsighi  trsplit  fin, ksplit[, kgainlow, kgainhigh]
 --
 -- csound doc: <http://www.csounds.com/manual/html/trsplit.html>
-trsplit :: Tuple a => Spec -> Sig -> a
+trsplit ::  Spec -> Sig -> (Spec,Spec)
 trsplit b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2
     where f a1 a2 = mopcs "trsplit" ([Fr,Fr],[Fr,Kr,Kr,Kr]) [a1,a2]
 
@@ -1140,7 +1140,7 @@
 -- > kfrq, kamp  ATSpartialtap  ipartialnum
 --
 -- csound doc: <http://www.csounds.com/manual/html/ATSpartialtap.html>
-atsPartialtap :: Tuple a => D -> a
+atsPartialtap ::  D -> (Sig,Sig)
 atsPartialtap b1 = pureTuple $ f <$> unD b1
     where f a1 = mopcs "ATSpartialtap" ([Kr,Kr],[Ir]) [a1]
 
@@ -1152,7 +1152,7 @@
 -- > kfreq, kamp  ATSread  ktimepnt, iatsfile, ipartial
 --
 -- csound doc: <http://www.csounds.com/manual/html/ATSread.html>
-atsRead :: Tuple a => Sig -> D -> D -> a
+atsRead ::  Sig -> D -> D -> (Sig,Sig)
 atsRead b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3
     where f a1 a2 a3 = mopcs "ATSread" ([Kr,Kr],[Kr,Ir,Ir]) [a1,a2,a3]
 
