{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances, FlexibleContexts #-} -- | Multiple Out module CsoundExpr.Base.MultiOut( MultiOut, mo, moA, moK, moI, mo1, mo2, mo3, mo4, mo5, mo6, mo7, mo8, mo9, mo10, mo11, mo12, mo13, mo14, mo15, mo16, mo17, mo18, mo19, mo20, mo21, mo22, mo23, mo24, mo25, mo26, mo27, mo28, mo29, mo30, mo31, mo32, moA1, moA2, moA3, moA4, moA6, moA8, moA16, moA24, moA32, moK1, moK2, moK3, moK4, moK6, moK8, moK16, moK24, moK32, moI1, moI2, moI3, moI4, moI6, moI8, moI16, moI24, moI32) where import CsoundExpr.Translator.Types import CsoundExpr.Base.Types import CsoundExpr.Translator.ExprTree.ExprTree import CsoundExpr.Translator.Cs.CsTree import CsoundExpr.Translator.Cs.IM data MultiOut = MultiOut CsTree instance IM CsTree MultiOut where from = MultiOut to (MultiOut a) = a labelMO :: (IM CsTree a) => Int -> MultiOut -> a labelMO id x = from $ outPort id $ (to x :: CsTree) rateOf :: (X a) => a -> Rate rateOf a = head $ exprType $ exprTreeTag t1 where t1 = to $ from t0 `asTypeOf` a :: CsTree t0 = pure (opc "") [] :: CsTree -- | extracts list of values mo :: (X a) => Int -> MultiOut -> [a] mo n x = map (flip labelMO x) [0 .. n - 1] moA :: Int -> MultiOut -> [Arate] moA = mo moK :: Int -> MultiOut -> [Krate] moK = mo moI :: Int -> MultiOut -> [Irate] moI = mo moA1 :: MultiOut -> (Arate) moA1 = mo1 moA2 :: MultiOut -> (Arate, Arate) moA2 = mo2 moA3 :: MultiOut -> (Arate, Arate, Arate) moA3 = mo3 moA4 :: MultiOut -> (Arate, Arate, Arate, Arate) moA4 = mo4 moA6 :: MultiOut -> (Arate, Arate, Arate, Arate, Arate, Arate) moA6 = mo6 moA8 :: MultiOut -> (Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate) moA8 = mo8 moA16 :: MultiOut -> (Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate) moA16 = mo16 moA24 :: MultiOut -> (Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate) moA24 = mo24 moA32 :: MultiOut -> (Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate, Arate) moA32 = mo32 moK1 :: MultiOut -> (Krate) moK1 = mo1 moK2 :: MultiOut -> (Krate, Krate) moK2 = mo2 moK3 :: MultiOut -> (Krate, Krate, Krate) moK3 = mo3 moK4 :: MultiOut -> (Krate, Krate, Krate, Krate) moK4 = mo4 moK6 :: MultiOut -> (Krate, Krate, Krate, Krate, Krate, Krate) moK6 = mo6 moK8 :: MultiOut -> (Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate) moK8 = mo8 moK16 :: MultiOut -> (Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate) moK16 = mo16 moK24 :: MultiOut -> (Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate) moK24 = mo24 moK32 :: MultiOut -> (Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate, Krate) moK32 = mo32 moI1 :: MultiOut -> (Irate) moI1 = mo1 moI2 :: MultiOut -> (Irate, Irate) moI2 = mo2 moI3 :: MultiOut -> (Irate, Irate, Irate) moI3 = mo3 moI4 :: MultiOut -> (Irate, Irate, Irate, Irate) moI4 = mo4 moI6 :: MultiOut -> (Irate, Irate, Irate, Irate, Irate, Irate) moI6 = mo6 moI8 :: MultiOut -> (Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate) moI8 = mo8 moI16 :: MultiOut -> (Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate) moI16 = mo16 moI24 :: MultiOut -> (Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate) moI24 = mo24 moI32 :: MultiOut -> (Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate, Irate) moI32 = mo32 mo1 :: (X a0) => MultiOut -> (a0) mo1 x = (y0) where y0 = rateMO rs $ labelMO 0 x rs = [rateOf y0] mo2 :: (X a0, X a1) => MultiOut -> (a0, a1) mo2 x = (y0, y1) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x rs = [rateOf y0, rateOf y1] mo3 :: (X a0, X a1, X a2) => MultiOut -> (a0, a1, a2) mo3 x = (y0, y1, y2) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x rs = [rateOf y0, rateOf y1, rateOf y2] mo4 :: (X a0, X a1, X a2, X a3) => MultiOut -> (a0, a1, a2, a3) mo4 x = (y0, y1, y2, y3) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3] mo5 :: (X a0, X a1, X a2, X a3, X a4) => MultiOut -> (a0, a1, a2, a3, a4) mo5 x = (y0, y1, y2, y3, y4) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4] mo6 :: (X a0, X a1, X a2, X a3, X a4, X a5) => MultiOut -> (a0, a1, a2, a3, a4, a5) mo6 x = (y0, y1, y2, y3, y4, y5) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5] mo7 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6) mo7 x = (y0, y1, y2, y3, y4, y5, y6) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6] mo8 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7) mo8 x = (y0, y1, y2, y3, y4, y5, y6, y7) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7] mo9 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8) mo9 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8] mo10 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) mo10 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9] mo11 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) mo11 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10] mo12 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) mo12 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11] mo13 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) mo13 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12] mo14 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) mo14 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13] mo15 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) mo15 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14] mo16 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) mo16 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15] mo17 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) mo17 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16] mo18 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) mo18 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17] mo19 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) mo19 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18] mo20 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) mo20 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19] mo21 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) mo21 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20] mo22 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) mo22 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21] mo23 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) mo23 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22] mo24 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) mo24 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23] mo25 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) mo25 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24] mo26 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) mo26 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25] mo27 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) mo27 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26] mo28 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26, X a27) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) mo28 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x y27 = rateMO rs $ labelMO 27 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26, rateOf y27] mo29 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26, X a27, X a28) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) mo29 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x y27 = rateMO rs $ labelMO 27 x y28 = rateMO rs $ labelMO 28 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26, rateOf y27, rateOf y28] mo30 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26, X a27, X a28, X a29) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) mo30 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x y27 = rateMO rs $ labelMO 27 x y28 = rateMO rs $ labelMO 28 x y29 = rateMO rs $ labelMO 29 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26, rateOf y27, rateOf y28, rateOf y29] mo31 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26, X a27, X a28, X a29, X a30) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) mo31 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x y27 = rateMO rs $ labelMO 27 x y28 = rateMO rs $ labelMO 28 x y29 = rateMO rs $ labelMO 29 x y30 = rateMO rs $ labelMO 30 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26, rateOf y27, rateOf y28, rateOf y29, rateOf y30] mo32 :: (X a0, X a1, X a2, X a3, X a4, X a5, X a6, X a7, X a8, X a9, X a10, X a11, X a12, X a13, X a14, X a15, X a16, X a17, X a18, X a19, X a20, X a21, X a22, X a23, X a24, X a25, X a26, X a27, X a28, X a29, X a30, X a31) => MultiOut -> (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) mo32 x = (y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30, y31) where y0 = rateMO rs $ labelMO 0 x y1 = rateMO rs $ labelMO 1 x y2 = rateMO rs $ labelMO 2 x y3 = rateMO rs $ labelMO 3 x y4 = rateMO rs $ labelMO 4 x y5 = rateMO rs $ labelMO 5 x y6 = rateMO rs $ labelMO 6 x y7 = rateMO rs $ labelMO 7 x y8 = rateMO rs $ labelMO 8 x y9 = rateMO rs $ labelMO 9 x y10 = rateMO rs $ labelMO 10 x y11 = rateMO rs $ labelMO 11 x y12 = rateMO rs $ labelMO 12 x y13 = rateMO rs $ labelMO 13 x y14 = rateMO rs $ labelMO 14 x y15 = rateMO rs $ labelMO 15 x y16 = rateMO rs $ labelMO 16 x y17 = rateMO rs $ labelMO 17 x y18 = rateMO rs $ labelMO 18 x y19 = rateMO rs $ labelMO 19 x y20 = rateMO rs $ labelMO 20 x y21 = rateMO rs $ labelMO 21 x y22 = rateMO rs $ labelMO 22 x y23 = rateMO rs $ labelMO 23 x y24 = rateMO rs $ labelMO 24 x y25 = rateMO rs $ labelMO 25 x y26 = rateMO rs $ labelMO 26 x y27 = rateMO rs $ labelMO 27 x y28 = rateMO rs $ labelMO 28 x y29 = rateMO rs $ labelMO 29 x y30 = rateMO rs $ labelMO 30 x y31 = rateMO rs $ labelMO 31 x rs = [rateOf y0, rateOf y1, rateOf y2, rateOf y3, rateOf y4, rateOf y5, rateOf y6, rateOf y7, rateOf y8, rateOf y9, rateOf y10, rateOf y11, rateOf y12, rateOf y13, rateOf y14, rateOf y15, rateOf y16, rateOf y17, rateOf y18, rateOf y19, rateOf y20, rateOf y21, rateOf y22, rateOf y23, rateOf y24, rateOf y25, rateOf y26, rateOf y27, rateOf y28, rateOf y29, rateOf y30, rateOf y31]