packages feed

mssql-simple 0.2.0.0 → 0.3.0.0

raw patch · 10 files changed

+1514/−1256 lines, 10 filesdep ~ms-tdsPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: ms-tds

API changes (from Hackage documentation)

- Database.MSSQLServer.Connection: newtype Connection
- Database.MSSQLServer.Query: RpcResult :: Int -> a -> b -> RpcResult a b
- Database.MSSQLServer.Query: data RpcResult a b
+ Database.MSSQLServer.Connection: [connectPacketSize] :: ConnectInfo -> !Word32
+ Database.MSSQLServer.Connection: data Connection
+ Database.MSSQLServer.Query: RpcResponse :: Int -> a -> b -> RpcResponse a b
+ Database.MSSQLServer.Query: class Result a
+ Database.MSSQLServer.Query: class RpcResponseSet a
+ Database.MSSQLServer.Query: class RpcResult a
+ Database.MSSQLServer.Query: data RpcResponse a b
+ Database.MSSQLServer.Query: withTransaction :: Connection -> IO a -> IO a
- Database.MSSQLServer.Connection: ConnectInfo :: String -> String -> String -> String -> String -> Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Int32 -> Collation32 -> String -> String -> String -> ConnectInfo
+ Database.MSSQLServer.Connection: ConnectInfo :: !String -> !String -> !String -> !String -> !String -> !Word8 -> !Word32 -> !Word8 -> !Word8 -> !Word8 -> !Word8 -> !Int32 -> !Collation32 -> !String -> !String -> !String -> ConnectInfo
- Database.MSSQLServer.Connection: Connection :: Socket -> Connection
+ Database.MSSQLServer.Connection: Connection :: Socket -> Word32 -> Connection
- Database.MSSQLServer.Connection: [connectAppName] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectAppName] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectCollation] :: ConnectInfo -> Collation32
+ Database.MSSQLServer.Connection: [connectCollation] :: ConnectInfo -> !Collation32
- Database.MSSQLServer.Connection: [connectDatabase] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectDatabase] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectEncryption] :: ConnectInfo -> Word8
+ Database.MSSQLServer.Connection: [connectEncryption] :: ConnectInfo -> !Word8
- Database.MSSQLServer.Connection: [connectHost] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectHost] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectLanguage] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectLanguage] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectOptionFlags1] :: ConnectInfo -> Word8
+ Database.MSSQLServer.Connection: [connectOptionFlags1] :: ConnectInfo -> !Word8
- Database.MSSQLServer.Connection: [connectOptionFlags2] :: ConnectInfo -> Word8
+ Database.MSSQLServer.Connection: [connectOptionFlags2] :: ConnectInfo -> !Word8
- Database.MSSQLServer.Connection: [connectOptionFlags3] :: ConnectInfo -> Word8
+ Database.MSSQLServer.Connection: [connectOptionFlags3] :: ConnectInfo -> !Word8
- Database.MSSQLServer.Connection: [connectPassword] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectPassword] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectPort] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectPort] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectServerName] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectServerName] :: ConnectInfo -> !String
- Database.MSSQLServer.Connection: [connectTimeZone] :: ConnectInfo -> Int32
+ Database.MSSQLServer.Connection: [connectTimeZone] :: ConnectInfo -> !Int32
- Database.MSSQLServer.Connection: [connectTypeFlags] :: ConnectInfo -> Word8
+ Database.MSSQLServer.Connection: [connectTypeFlags] :: ConnectInfo -> !Word8
- Database.MSSQLServer.Connection: [connectUser] :: ConnectInfo -> String
+ Database.MSSQLServer.Connection: [connectUser] :: ConnectInfo -> !String
- Database.MSSQLServer.Query: fromListOfTokenStreams :: RpcResultSet a => [[TokenStream]] -> a
+ Database.MSSQLServer.Query: fromListOfTokenStreams :: RpcResponseSet a => [[TokenStream]] -> a
- Database.MSSQLServer.Query: rpc :: (RpcQuerySet a, RpcResultSet b) => Connection -> a -> IO b
+ Database.MSSQLServer.Query: rpc :: (RpcQuerySet a, RpcResponseSet b) => Connection -> a -> IO b

Files

README.md view
@@ -31,6 +31,8 @@  * Supports stored procedure RPC +* Supports Transaction+ * 7.1 Revision 1 (SQL Server 2000 SP1 and later)  * Tested with SQL Server 2008 R2, SQL Server 2014@@ -42,9 +44,6 @@ * Write tests   * Write general tests   --* Transaction support-  * ETC   * Encrypt entire connection support
mssql-simple.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: d70d13300986bfde1bfe0708c1c3884906b4112baab990a9d4555cce87b387c5+-- hash: 746ba7c124efc008044c4c42749d9ba2caf522a663254b0269a7e1ea92ed1423  name:           mssql-simple-version:        0.2.0.0+version:        0.3.0.0 synopsis:       SQL Server client library implemented in Haskell description:    Please see the README on GitHub at <https://github.com/mitsuji/mssql-simple#readme> category:       Database@@ -33,8 +33,10 @@       Database.MSSQLServer.Query       Database.MSSQLServer.Query.Only       Database.MSSQLServer.Query.ResultSet+      Database.MSSQLServer.Query.Row       Database.MSSQLServer.Query.RpcQuerySet-      Database.MSSQLServer.Query.RpcResultSet+      Database.MSSQLServer.Query.RpcResponseSet+      Database.MSSQLServer.Query.TokenStreamParser   other-modules:       Paths_mssql_simple   hs-source-dirs:@@ -44,7 +46,7 @@     , binary     , bytestring     , hostname-    , ms-tds >=0.2 && <0.3+    , ms-tds >=0.3 && <0.4     , network     , text     , time@@ -64,7 +66,7 @@     , binary     , bytestring     , hostname-    , ms-tds >=0.2 && <0.3+    , ms-tds >=0.3 && <0.4     , mssql-simple     , network     , text
src/Database/MSSQLServer/Connection.hs view
@@ -25,7 +25,7 @@ import qualified Data.Text.IO as T import qualified Data.Text.Encoding as T -import Data.Binary (Binary(..),encode)+import Data.Binary (Binary(..)) import qualified Data.Binary.Put as Put import qualified Data.Binary.Get as Get @@ -38,7 +38,7 @@ import Database.Tds.Message import Database.Tds.Transport (contextNew) -import Data.Word (Word8)+import Data.Word (Word8,Word32) import Data.Int (Int32) import Data.Typeable(Typeable) @@ -53,21 +53,22 @@   -data ConnectInfo = ConnectInfo { connectHost :: String-                               , connectPort :: String-                               , connectDatabase :: String-                               , connectUser :: String-                               , connectPassword :: String-                               , connectEncryption :: Word8-                               , connectOptionFlags1 :: Word8-                               , connectOptionFlags2 :: Word8-                               , connectOptionFlags3 :: Word8-                               , connectTypeFlags :: Word8-                               , connectTimeZone :: Int32-                               , connectCollation :: Collation32-                               , connectLanguage :: String-                               , connectAppName :: String-                               , connectServerName :: String+data ConnectInfo = ConnectInfo { connectHost :: !String+                               , connectPort :: !String+                               , connectDatabase :: !String+                               , connectUser :: !String+                               , connectPassword :: !String+                               , connectEncryption :: !Word8+                               , connectPacketSize :: !Word32+                               , connectOptionFlags1 :: !Word8+                               , connectOptionFlags2 :: !Word8+                               , connectOptionFlags3 :: !Word8+                               , connectTypeFlags :: !Word8+                               , connectTimeZone :: !Int32+                               , connectCollation :: !Collation32+                               , connectLanguage :: !String+                               , connectAppName :: !String+                               , connectServerName :: !String                                }  defaultConnectInfo :: ConnectInfo@@ -80,6 +81,7 @@                  , connectUser = T.unpack $ l7UserName l7                  , connectPassword = T.unpack $ l7Password l7                  , connectEncryption = 0x00 -- 0x00: ENCRYPT_OFF (Encrypt login packet only), 0x02: ENCRYPT_NOT_SUP (No encryption)+                 , connectPacketSize = l7PacketSize l7                  , connectOptionFlags1 = l7OptionFlags1 l7                  , connectOptionFlags2 = l7OptionFlags2 l7                  , connectOptionFlags3 = l7OptionFlags3 l7@@ -92,15 +94,15 @@                  }                     -newtype Connection = Connection Socket+data Connection = Connection Socket Word32   connect :: ConnectInfo -> IO Connection-connect ci@(ConnectInfo host port _ _ _ encrypt _ _ _ _ _ _ _ _ _) = do+connect ci@(ConnectInfo host port _ _ _ encrypt ps _ _ _ _ _ _ _ _ _) = do   addr <- resolve host port   sock <- connect' addr   -  Prelogin plResOpts <- performPrelogin sock encrypt+  Prelogin plResOpts <- performPrelogin sock ps encrypt    [PLOEncryption modeEnc]  <- case filter isPLOEncryption plResOpts of                                 [] -> throwIO $ ProtocolError "connect: PLOEncryption is necessary"@@ -113,7 +115,7 @@    login7 <- newLogin7 ci -  ServerMessage tss <- case encrypt of+  tss <- case encrypt of     0x00 -> do       ---       --- TLS handshake@@ -124,21 +126,21 @@       ---        --- Login with encrypted packet       --- -      TLS.sendData tlsContext $ encode $ CMLogin7 login7-      readMessage sock $ Get.runGetIncremental get+      TLS.sendData tlsContext $ Put.runPut $ putClientMessage ps $ CMLogin7 login7+      readMessage sock $ Get.runGetIncremental getServerMessage     0x02 -> do       ---        --- Login without encryipted packet       --- -      sendAll sock $ encode $ CMLogin7 login7-      readMessage sock $ Get.runGetIncremental get+      sendAll sock $ Put.runPut $ putClientMessage ps $ CMLogin7 login7+      readMessage sock $ Get.runGetIncremental getServerMessage          ---    --- Verify Ack   ---    validLoginAck login7 tss   -  return $ Connection sock+  return $ Connection sock ps   @@ -147,46 +149,48 @@   close :: Connection -> IO ()-close (Connection sock) = Socket.close sock+close (Connection sock _ ) = Socket.close sock    -performPrelogin :: Socket -> Word8 -> IO Prelogin-performPrelogin sock enc = do+performPrelogin :: Socket -> Word32 -> Word8 -> IO Prelogin+performPrelogin sock ps enc = do   -- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/60f56408-0188-4cd5-8b90-25c6f2423868   --   -- Prelogin   --   -- [TODO] Threadid support   -- [TODO] Mars support-  let clientPrelogin = Prelogin [ PLOVersion 9 0 0 0+  let clientPrelogin = Prelogin [ PLOVersion 8 0 341 0                                 , PLOEncryption enc                                 , PLOInstopt "MSSQLServer"                                 , PLOThreadid (Just 1000) -- [TODO]                                 , PLOMars 0 -- [TODO]                                 ]-  sendAll sock $ encode $ CMPrelogin clientPrelogin-  ServerMessage serverPrelogin <- readMessage sock $ Get.runGetIncremental get+  sendAll sock $ Put.runPut $ putClientMessage ps $ CMPrelogin clientPrelogin+  serverPrelogin <- readMessage sock $ Get.runGetIncremental getServerMessage      return serverPrelogin      newLogin7 :: ConnectInfo -> IO Login7-newLogin7 (ConnectInfo _ _ database user pass _ optf1 optf2 optf3 typef tz coll lang app serv) = do+newLogin7 (ConnectInfo _ _ database user pass _ _ optf1 optf2 optf3 typef tz coll lang app serv) = do   ---   --- Login7   ---   -- [TODO] process ID support   -- [TODO] MAC address support   hostname <- getHostName-  let login7 = defaultLogin7 { l7OptionFlags1 = optf1+  let login7 = defaultLogin7 { l7ClientProgVer = 1+                             , l7OptionFlags1 = optf1                              , l7OptionFlags2 = optf2                              , l7OptionFlags3 = optf3                              , l7TypeFlags = typef                              , l7TimeZone = tz                              , l7Collation = coll+                             , l7CltIntName = T.pack "mssql-simple"                              , l7Language = T.pack lang                              , l7ClientPID = 1 -- [TODO]                              , l7ClientMacAddr = B.pack [0x00,0x00,0x00,0x00,0x00,0x00] -- [TODO]
src/Database/MSSQLServer/Query.hs view
@@ -5,16 +5,22 @@                                                                        -- ** ResultSet                                   , ResultSet (..)+                                  , Result (..)                                   , Row (..)+                                  , Only (..)                                                                      -- * RPC Query                                   , rpc                                   +                                  -- ** RpcResponseSet+                                  , RpcResponseSet (..)+                                  , RpcResponse (..)+                                  , RpcOutputSet (..)+                                                                     -- ** RpcResultSet                                   , RpcResultSet (..)                                   , RpcResult (..)-                                  , RpcOutputSet (..)-                                  +                                   -- ** RpcQuerySet                                   , RpcQuerySet (..)                                   , RpcQuery (..)@@ -27,9 +33,9 @@                                   , ntextVal                                   , varcharVal                                   , textVal-                                  , Only (..)                                                                      -- * Exceptions+                                  , withTransaction                                   , QueryError (..)                                   ) where @@ -47,16 +53,18 @@  import Data.Binary (Binary(..),encode) import qualified Data.Binary.Get as Get+import qualified Data.Binary.Put as Put  import Control.Monad (when)-import Control.Exception (Exception(..),throwIO)+import Control.Exception (Exception(..),throwIO,onException)  import Database.Tds.Message  import Database.MSSQLServer.Connection import Database.MSSQLServer.Query.Only+import Database.MSSQLServer.Query.Row import Database.MSSQLServer.Query.ResultSet-import Database.MSSQLServer.Query.RpcResultSet+import Database.MSSQLServer.Query.RpcResponseSet import Database.MSSQLServer.Query.RpcQuerySet  @@ -67,9 +75,9 @@   sql :: ResultSet a => Connection -> T.Text -> IO a-sql (Connection sock) query = do-  sendAll sock $ encode $ CMSqlBatch $ SqlBatch query-  ServerMessage (TokenStreams tss) <- readMessage sock $ Get.runGetIncremental get+sql (Connection sock ps) query = do+  sendAll sock $ Put.runPut $ putClientMessage ps $ CMSqlBatch $ SqlBatch query+  TokenStreams tss <- readMessage sock $ Get.runGetIncremental getServerMessage    case filter isTSError tss of     [] -> return $ fromTokenStreams tss@@ -77,10 +85,10 @@   -rpc :: (RpcQuerySet a, RpcResultSet b) => Connection -> a -> IO b-rpc (Connection sock) queries = do-  sendAll sock $ encode $ CMRpcRequest $ toRpcRequest queries-  ServerMessage (TokenStreams tss) <- readMessage sock $ Get.runGetIncremental get+rpc :: (RpcQuerySet a, RpcResponseSet b) => Connection -> a -> IO b+rpc (Connection sock ps) queries = do+  sendAll sock $ Put.runPut $ putClientMessage ps $ CMRpcRequest $ toRpcRequest queries+  TokenStreams tss <- readMessage sock $ Get.runGetIncremental getServerMessage    case filter isTSError tss of     [] -> return $ fromListOfTokenStreams $ splitBy isTSDoneProc tss@@ -116,6 +124,19 @@  textVal :: RpcParamName -> B.ByteString -> RpcParam B.ByteString textVal name bs = RpcParamVal name (TIText (fromIntegral $ B.length bs) (Collation 0x00000000 0x00)) bs++++withTransaction :: Connection -> IO a -> IO a+withTransaction conn act = do+  begin+  r <- act `onException` rollback+  commit+  return r+    where+      begin = sql conn $ T.pack "BEGIN TRANSACTION" :: IO ()+      commit = sql conn $ T.pack "COMMIT TRANSACTION" :: IO ()+      rollback = sql conn $ T.pack "ROLLBACK TRANSACTION":: IO ()   
src/Database/MSSQLServer/Query/ResultSet.hs view
@@ -1,17 +1,16 @@ {-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleInstances #-}  module Database.MSSQLServer.Query.ResultSet ( ResultSet (..)-                                            , extractTableStreams-                                            , Row (..)+                                            , Result                                             ) where  -import Control.Applicative((<$>),(<*>))+import Control.Applicative((<$>),Applicative((<*>)),Alternative(empty)) import Database.Tds.Message+import Database.MSSQLServer.Query.Row import Database.MSSQLServer.Query.Only-+import Database.MSSQLServer.Query.TokenStreamParser   @@ -20,623 +19,83 @@   instance ResultSet () where-  fromTokenStreams = f . extractTableStreams-    where-      f [] = ()-      f _ = error "fromTokenStreams: List length must be 0"+  fromTokenStreams xs = case parse noResult xs of+                          [] -> error "fromTokenStreams(ResultSet ()): failed to parse"+                          (x,_):_ -> x  instance (Row a) => ResultSet [a] where-  fromTokenStreams = f . extractTableStreams-    where-      f [(m1,r1)] = b1-        where-          !b1 = fromListOfRawBytes m1 <$> r1-      f _ = error "fromTokenStreams: List length must be 1"+  fromTokenStreams xs = case parse listOfRow xs of+                          [] -> error "fromTokenStreams(ResultSet [Row a]): failed to parse"+                          (x,_):_ -> x -instance (Row a, Row b) => ResultSet ([a],[b]) where-  fromTokenStreams = f . extractTableStreams-    where-      f [(m1,r1),(m2,r2)] = (b1,b2)-        where-          !b1 = fromListOfRawBytes m1 <$> r1-          !b2 = fromListOfRawBytes m2 <$> r2-      f _ = error "fromTokenStreams: List length must be 2"+instance ResultSet Int where+  fromTokenStreams xs = case parse rowCount xs of+                          [] -> error "fromTokenStreams(ResultSet Int): failed to parse"+                          (x,_):_ -> x -instance (Row a, Row b, Row c) => ResultSet ([a],[b],[c]) where-  fromTokenStreams = f . extractTableStreams-    where-      f [(m1,r1),(m2,r2),(m3,r3)] = (b1,b2,b3)-        where-          !b1 = fromListOfRawBytes m1 <$> r1-          !b2 = fromListOfRawBytes m2 <$> r2-          !b3 = fromListOfRawBytes m3 <$> r3-      f _ = error "fromTokenStreams: List length must be 3" -instance (Row a, Row b, Row c, Row d) => ResultSet ([a],[b],[c],[d]) where-  fromTokenStreams = f . extractTableStreams+-- [TODO] use Template Haskell+instance (Result a, Result b) => ResultSet (a, b) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(ResultSet (Result a, Result b)): failed to parse"+                          (x,_):_ -> x     where-      f [(m1,r1),(m2,r2),(m3,r3),(m4,r4)] = (b1,b2,b3,b4)-        where-          !b1 = fromListOfRawBytes m1 <$> r1-          !b2 = fromListOfRawBytes m2 <$> r2-          !b3 = fromListOfRawBytes m3 <$> r3-          !b4 = fromListOfRawBytes m4 <$> r4-      f _ = error "fromTokenStreams: List length must be 4"+      p :: (Result a, Result b) => Parser (a, b)+      p = do+        !r1 <- resultParser :: (Result a) => Parser a+        !r2 <- resultParser :: (Result b) => Parser b+        return  (r1,r2) -instance (Row a, Row b, Row c, Row d, Row e) => ResultSet ([a],[b],[c],[d],[e]) where-  fromTokenStreams = f . extractTableStreams+instance (Result a, Result b, Result c) => ResultSet (a, b, c) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(ResultSet (Result a, Result b, Result c)): failed to parse"+                          (x,_):_ -> x     where-      f [(m1,r1),(m2,r2),(m3,r3),(m4,r4),(m5,r5)] = (b1,b2,b3,b4,b5)-        where-          !b1 = fromListOfRawBytes m1 <$> r1-          !b2 = fromListOfRawBytes m2 <$> r2-          !b3 = fromListOfRawBytes m3 <$> r3-          !b4 = fromListOfRawBytes m4 <$> r4-          !b5 = fromListOfRawBytes m5 <$> r5-      f _ = error "fromTokenStreams: List length must be 5"-----extractTableStreams :: [TokenStream] -> [([MetaColumnData],[[RawBytes]])]-extractTableStreams = map extract . span' . ( filter $ \x -> isTSColMetaData x || isTSRow x )-  where-    -- [(TSColMetaData,[TSRow])]-    span' :: [TokenStream] -> [(TokenStream,[TokenStream])]-    span' [] = []-    span' (cmd@TSColMetaData{}:xs) =-      let-        (rs,xs') = span isTSRow xs-      in (cmd,rs):span' xs'-    span' _ = error "extractTableStrams: TSColMetaData is necesarry"--    isTSColMetaData :: TokenStream -> Bool-    isTSColMetaData (TSColMetaData{}) = True-    isTSColMetaData _ = False--    isTSRow :: TokenStream -> Bool-    isTSRow (TSRow{}) = True-    isTSRow _ = False--    extract :: (TokenStream,[TokenStream]) -> ([MetaColumnData],[[RawBytes]])-    extract = \(tsCmd,tsRss) ->-      let (TSColMetaData (maybeCmd)) = tsCmd-          cds = case (\(ColMetaData x) -> x) <$> maybeCmd of-            Nothing -> error "extractTableStrams: ColMetaData is necessary"-            Just cds' -> cds'-          datas = (\(TSRow row) -> rawBytes <$> row) <$> tsRss-      in (cds, datas)-      where-        rawBytes :: RowColumnData -> RawBytes-        rawBytes (RCDOrdinal dt) = dt-        rawBytes (RCDLarge _ _ dt) = dt---mcdTypeInfo :: MetaColumnData -> TypeInfo-mcdTypeInfo (MetaColumnData _ _ ti _ _) = ti---class Row a where-  fromListOfRawBytes :: [MetaColumnData] -> [RawBytes] -> a--instance Row () where-  fromListOfRawBytes [] [] = ()-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 0"+      p :: (Result a, Result b, Result c) => Parser (a, b, c)+      p = do+        !r1 <- resultParser :: (Result a) => Parser a+        !r2 <- resultParser :: (Result b) => Parser b+        !r3 <- resultParser :: (Result c) => Parser c+        return  (r1,r2,r3) -instance (Data a) => Row (Only a) where-  fromListOfRawBytes [m1] [b1] = Only d1+instance (Result a, Result b, Result c, Result d) => ResultSet (a, b, c, d) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(ResultSet (Result a, Result b, Result c, Result d)): failed to parse"+                          (x,_):_ -> x     where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 1"+      p :: (Result a, Result b, Result c, Result d) => Parser (a, b, c, d)+      p = do+        !r1 <- resultParser :: (Result a) => Parser a+        !r2 <- resultParser :: (Result b) => Parser b+        !r3 <- resultParser :: (Result c) => Parser c+        !r4 <- resultParser :: (Result d) => Parser d+        return  (r1,r2,r3,r4) -instance (Data a, Data b) => Row (a,b) where-  fromListOfRawBytes [m1,m2] [b1,b2] = (d1,d2)+instance (Result a, Result b, Result c, Result d, Result e) => ResultSet (a, b, c, d, e) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(ResultSet (Result a, Result b, Result c, Result d, Result e)): failed to parse"+                          (x,_):_ -> x     where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 2"+      p :: (Result a, Result b, Result c, Result d, Result e) => Parser (a, b, c, d, e)+      p = do+        !r1 <- resultParser :: (Result a) => Parser a+        !r2 <- resultParser :: (Result b) => Parser b+        !r3 <- resultParser :: (Result c) => Parser c+        !r4 <- resultParser :: (Result d) => Parser d+        !r5 <- resultParser :: (Result e) => Parser e+        return  (r1,r2,r3,r4,r5) -instance (Data a, Data b, Data c) => Row (a,b,c) where-  fromListOfRawBytes [m1,m2,m3] [b1,b2,b3] = (d1,d2,d3)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 3" -instance (Data a, Data b, Data c, Data d) => Row (a,b,c,d) where-  fromListOfRawBytes [m1,m2,m3,m4] [b1,b2,b3,b4] = (d1,d2,d3,d4)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 4" -instance (Data a, Data b, Data c, Data d, Data e) => Row (a,b,c,d,e) where-  fromListOfRawBytes [m1,m2,m3,m4,m5] [b1,b2,b3,b4,b5] = (d1,d2,d3,d4,d5)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 5"--instance (Data a, Data b, Data c, Data d, Data e, Data f) => Row (a,b,c,d,e,f) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6] [b1,b2,b3,b4,b5,b6] = (d1,d2,d3,d4,d5,d6)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 6"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g) => Row (a,b,c,d,e,f,g) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7] [b1,b2,b3,b4,b5,b6,b7] = (d1,d2,d3,d4,d5,d6,d7)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 7"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h) => Row (a,b,c,d,e,f,g,h) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8] [b1,b2,b3,b4,b5,b6,b7,b8] = (d1,d2,d3,d4,d5,d6,d7,d8)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 8"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i) => Row (a,b,c,d,e,f,g,h,i) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9] [b1,b2,b3,b4,b5,b6,b7,b8,b9] = (d1,d2,d3,d4,d5,d6,d7,d8,d9)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 9"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j) => Row (a,b,c,d,e,f,g,h,i,j) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 10"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k) => Row (a,b,c,d,e,f,g,h,i,j,k) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 11"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l) => Row (a,b,c,d,e,f,g,h,i,j,k,l) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 12"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m) => Row (a,b,c,d,e,f,g,h,i,j,k,l,m) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 13"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n) => Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 14"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 15"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 16"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 17"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 18"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 19"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 20"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 21"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u, Data v) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-      !d22 = fromRawBytes (mcdTypeInfo m22) b22-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 22"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u, Data v, Data w) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-      !d22 = fromRawBytes (mcdTypeInfo m22) b22-      !d23 = fromRawBytes (mcdTypeInfo m23) b23-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 23"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u, Data v, Data w, Data x) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-      !d22 = fromRawBytes (mcdTypeInfo m22) b22-      !d23 = fromRawBytes (mcdTypeInfo m23) b23-      !d24 = fromRawBytes (mcdTypeInfo m24) b24-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 24"+class Result a where+  resultParser :: Parser a -instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u, Data v, Data w, Data x, Data y) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24,m25] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-      !d22 = fromRawBytes (mcdTypeInfo m22) b22-      !d23 = fromRawBytes (mcdTypeInfo m23) b23-      !d24 = fromRawBytes (mcdTypeInfo m24) b24-      !d25 = fromRawBytes (mcdTypeInfo m25) b25-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 25"+instance Result () where+  resultParser = noResult -instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s-         , Data t, Data u, Data v, Data w, Data x, Data y, Data z) =>-         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) where-  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24,m25,m26] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26)-    where-      !d1 = fromRawBytes (mcdTypeInfo m1) b1-      !d2 = fromRawBytes (mcdTypeInfo m2) b2-      !d3 = fromRawBytes (mcdTypeInfo m3) b3-      !d4 = fromRawBytes (mcdTypeInfo m4) b4-      !d5 = fromRawBytes (mcdTypeInfo m5) b5-      !d6 = fromRawBytes (mcdTypeInfo m6) b6-      !d7 = fromRawBytes (mcdTypeInfo m7) b7-      !d8 = fromRawBytes (mcdTypeInfo m8) b8-      !d9 = fromRawBytes (mcdTypeInfo m9) b9-      !d10 = fromRawBytes (mcdTypeInfo m10) b10-      !d11 = fromRawBytes (mcdTypeInfo m11) b11-      !d12 = fromRawBytes (mcdTypeInfo m12) b12-      !d13 = fromRawBytes (mcdTypeInfo m13) b13-      !d14 = fromRawBytes (mcdTypeInfo m14) b14-      !d15 = fromRawBytes (mcdTypeInfo m15) b15-      !d16 = fromRawBytes (mcdTypeInfo m16) b16-      !d17 = fromRawBytes (mcdTypeInfo m17) b17-      !d18 = fromRawBytes (mcdTypeInfo m18) b18-      !d19 = fromRawBytes (mcdTypeInfo m19) b19-      !d20 = fromRawBytes (mcdTypeInfo m20) b20-      !d21 = fromRawBytes (mcdTypeInfo m21) b21-      !d22 = fromRawBytes (mcdTypeInfo m22) b22-      !d23 = fromRawBytes (mcdTypeInfo m23) b23-      !d24 = fromRawBytes (mcdTypeInfo m24) b24-      !d25 = fromRawBytes (mcdTypeInfo m25) b25-      !d26 = fromRawBytes (mcdTypeInfo m26) b26-  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 26"+instance Row a => Result [a] where+  resultParser = listOfRow +instance Result Int where+  resultParser = rowCount 
+ src/Database/MSSQLServer/Query/Row.hs view
@@ -0,0 +1,539 @@+{-# OPTIONS_HADDOCK hide #-}+{-# LANGUAGE BangPatterns #-}++module Database.MSSQLServer.Query.Row ( Row (..)+                                      ) where++import Database.Tds.Message+import Database.MSSQLServer.Query.Only+++mcdTypeInfo :: MetaColumnData -> TypeInfo+mcdTypeInfo (MetaColumnData _ _ ti _ _) = ti+++class Row a where+  fromListOfRawBytes :: [MetaColumnData] -> [RawBytes] -> a++-- [TODO] use Template Haskell+instance Row () where+  fromListOfRawBytes [] [] = ()+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 0"++instance (Data a) => Row (Only a) where+  fromListOfRawBytes [m1] [b1] = Only d1+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 1"++instance (Data a, Data b) => Row (a,b) where+  fromListOfRawBytes [m1,m2] [b1,b2] = (d1,d2)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 2"++instance (Data a, Data b, Data c) => Row (a,b,c) where+  fromListOfRawBytes [m1,m2,m3] [b1,b2,b3] = (d1,d2,d3)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 3"++instance (Data a, Data b, Data c, Data d) => Row (a,b,c,d) where+  fromListOfRawBytes [m1,m2,m3,m4] [b1,b2,b3,b4] = (d1,d2,d3,d4)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 4"++instance (Data a, Data b, Data c, Data d, Data e) => Row (a,b,c,d,e) where+  fromListOfRawBytes [m1,m2,m3,m4,m5] [b1,b2,b3,b4,b5] = (d1,d2,d3,d4,d5)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 5"++instance (Data a, Data b, Data c, Data d, Data e, Data f) => Row (a,b,c,d,e,f) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6] [b1,b2,b3,b4,b5,b6] = (d1,d2,d3,d4,d5,d6)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 6"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g) => Row (a,b,c,d,e,f,g) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7] [b1,b2,b3,b4,b5,b6,b7] = (d1,d2,d3,d4,d5,d6,d7)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 7"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h) => Row (a,b,c,d,e,f,g,h) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8] [b1,b2,b3,b4,b5,b6,b7,b8] = (d1,d2,d3,d4,d5,d6,d7,d8)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 8"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i) => Row (a,b,c,d,e,f,g,h,i) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9] [b1,b2,b3,b4,b5,b6,b7,b8,b9] = (d1,d2,d3,d4,d5,d6,d7,d8,d9)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 9"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j) => Row (a,b,c,d,e,f,g,h,i,j) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 10"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k) => Row (a,b,c,d,e,f,g,h,i,j,k) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 11"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l) => Row (a,b,c,d,e,f,g,h,i,j,k,l) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 12"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m) => Row (a,b,c,d,e,f,g,h,i,j,k,l,m) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 13"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n) => Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 14"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 15"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 16"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 17"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 18"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 19"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 20"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 21"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u, Data v) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+      !d22 = fromRawBytes (mcdTypeInfo m22) b22+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 22"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u, Data v, Data w) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+      !d22 = fromRawBytes (mcdTypeInfo m22) b22+      !d23 = fromRawBytes (mcdTypeInfo m23) b23+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 23"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u, Data v, Data w, Data x) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+      !d22 = fromRawBytes (mcdTypeInfo m22) b22+      !d23 = fromRawBytes (mcdTypeInfo m23) b23+      !d24 = fromRawBytes (mcdTypeInfo m24) b24+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 24"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u, Data v, Data w, Data x, Data y) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24,m25] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+      !d22 = fromRawBytes (mcdTypeInfo m22) b22+      !d23 = fromRawBytes (mcdTypeInfo m23) b23+      !d24 = fromRawBytes (mcdTypeInfo m24) b24+      !d25 = fromRawBytes (mcdTypeInfo m25) b25+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 25"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s+         , Data t, Data u, Data v, Data w, Data x, Data y, Data z) =>+         Row (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) where+  fromListOfRawBytes [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24,m25,m26] [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26)+    where+      !d1 = fromRawBytes (mcdTypeInfo m1) b1+      !d2 = fromRawBytes (mcdTypeInfo m2) b2+      !d3 = fromRawBytes (mcdTypeInfo m3) b3+      !d4 = fromRawBytes (mcdTypeInfo m4) b4+      !d5 = fromRawBytes (mcdTypeInfo m5) b5+      !d6 = fromRawBytes (mcdTypeInfo m6) b6+      !d7 = fromRawBytes (mcdTypeInfo m7) b7+      !d8 = fromRawBytes (mcdTypeInfo m8) b8+      !d9 = fromRawBytes (mcdTypeInfo m9) b9+      !d10 = fromRawBytes (mcdTypeInfo m10) b10+      !d11 = fromRawBytes (mcdTypeInfo m11) b11+      !d12 = fromRawBytes (mcdTypeInfo m12) b12+      !d13 = fromRawBytes (mcdTypeInfo m13) b13+      !d14 = fromRawBytes (mcdTypeInfo m14) b14+      !d15 = fromRawBytes (mcdTypeInfo m15) b15+      !d16 = fromRawBytes (mcdTypeInfo m16) b16+      !d17 = fromRawBytes (mcdTypeInfo m17) b17+      !d18 = fromRawBytes (mcdTypeInfo m18) b18+      !d19 = fromRawBytes (mcdTypeInfo m19) b19+      !d20 = fromRawBytes (mcdTypeInfo m20) b20+      !d21 = fromRawBytes (mcdTypeInfo m21) b21+      !d22 = fromRawBytes (mcdTypeInfo m22) b22+      !d23 = fromRawBytes (mcdTypeInfo m23) b23+      !d24 = fromRawBytes (mcdTypeInfo m24) b24+      !d25 = fromRawBytes (mcdTypeInfo m25) b25+      !d26 = fromRawBytes (mcdTypeInfo m26) b26+  fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 26"++
src/Database/MSSQLServer/Query/RpcQuerySet.hs view
@@ -26,6 +26,7 @@ class RpcQuerySet a where   toRpcRequest :: a -> RpcRequest +-- [TODO] use Template Haskell instance (RpcQueryId a1, RpcParamSet b1) => RpcQuerySet (RpcQuery a1 b1) where   toRpcRequest (RpcQuery a1 b1) = RpcRequest [r1]     where@@ -104,6 +105,7 @@ instance RpcParamSet () where   toRpcReqBatchParams _ = [] +-- [TODO] use Template Haskell instance (Data a) => RpcParamSet (RpcParam a) where   toRpcReqBatchParams v1 = [b1]     where
+ src/Database/MSSQLServer/Query/RpcResponseSet.hs view
@@ -0,0 +1,682 @@+{-# OPTIONS_HADDOCK hide #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-}++module Database.MSSQLServer.Query.RpcResponseSet ( RpcResponseSet (..)+                                                 , RpcResponse (..)+                                                 , RpcResultSet+                                                 , RpcResult+                                                 , RpcOutputSet (..)+                                                 ) where++import Control.Applicative((<$>),(<*>))+import Database.Tds.Message+import Database.MSSQLServer.Query.Row+import Database.MSSQLServer.Query.Only++import Database.MSSQLServer.Query.TokenStreamParser+++++class RpcResponseSet a where+  fromListOfTokenStreams :: [[TokenStream]] -> a++-- [TODO] use Template Haskell+instance (RpcOutputSet a1, RpcResultSet b1) => RpcResponseSet (RpcResponse a1 b1) where+  fromListOfTokenStreams [v1] = b1+    where+      !b1 = rpcResponse v1+  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 1"+  +instance (RpcOutputSet a1, RpcResultSet b1, RpcOutputSet a2, RpcResultSet b2) => RpcResponseSet (RpcResponse a1 b1, RpcResponse a2 b2) where+  fromListOfTokenStreams [v1,v2] =  (b1, b2)+    where+      !b1 = rpcResponse v1+      !b2 = rpcResponse v2+  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 2"++instance (RpcOutputSet a1, RpcResultSet b1, RpcOutputSet a2, RpcResultSet b2, RpcOutputSet a3, RpcResultSet b3) => RpcResponseSet (RpcResponse a1 b1, RpcResponse a2 b2, RpcResponse a3 b3) where+  fromListOfTokenStreams [v1,v2,v3] =  (b1, b2, b3)+    where+      !b1 = rpcResponse v1+      !b2 = rpcResponse v2+      !b3 = rpcResponse v3+  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 3"++instance (RpcOutputSet a1, RpcResultSet b1, RpcOutputSet a2, RpcResultSet b2, RpcOutputSet a3, RpcResultSet b3, RpcOutputSet a4, RpcResultSet b4) => RpcResponseSet (RpcResponse a1 b1, RpcResponse a2 b2, RpcResponse a3 b3, RpcResponse a4 b4) where+  fromListOfTokenStreams [v1,v2,v3,v4] =  (b1, b2, b3, b4)+    where+      !b1 = rpcResponse v1+      !b2 = rpcResponse v2+      !b3 = rpcResponse v3+      !b4 = rpcResponse v4+  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 4"++instance (RpcOutputSet a1, RpcResultSet b1, RpcOutputSet a2, RpcResultSet b2, RpcOutputSet a3, RpcResultSet b3, RpcOutputSet a4, RpcResultSet b4, RpcOutputSet a5, RpcResultSet b5) => RpcResponseSet (RpcResponse a1 b1, RpcResponse a2 b2, RpcResponse a3 b3, RpcResponse a4 b4, RpcResponse a5 b5) where+  fromListOfTokenStreams [v1,v2,v3,v4,v5] =  (b1, b2, b3, b4, b5)+    where+      !b1 = rpcResponse v1+      !b2 = rpcResponse v2+      !b3 = rpcResponse v3+      !b4 = rpcResponse v4+      !b5 = rpcResponse v5+  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 5"+++++-- (RpcOutputSet a, RpcResultSet b) => +data RpcResponse a b = RpcResponse Int a b+                   deriving (Show)++rpcResponse :: (RpcOutputSet a, RpcResultSet b) => [TokenStream] -> RpcResponse a b+rpcResponse tss =+  -- [TODO] performance tuning (avoid filter all)+  let [TSReturnStatus ret] = case filter isTSReturnStatus tss of+                               [] -> error "rpcResponse: TSReturnStatus is necessary"+                               xs -> xs+      rvs = (\(TSReturnValue rv) -> rv) <$> filter isTSReturnValue tss+      rss = fromTokenStreams tss++  in RpcResponse (fromIntegral ret) (fromReturnValues rvs) rss++  where+    isTSReturnStatus :: TokenStream -> Bool+    isTSReturnStatus (TSReturnStatus{}) = True+    isTSReturnStatus _ = False+    +    isTSReturnValue :: TokenStream -> Bool+    isTSReturnValue (TSReturnValue{}) = True+    isTSReturnValue _ = False++++class RpcResultSet a where+  fromTokenStreams :: [TokenStream] -> a+++instance RpcResultSet () where+  fromTokenStreams xs = case parse noResult xs of+                          [] -> error "fromTokenStreams(RpcResultSet ()): failed to parse"+                          (x,_):_ -> x++instance (Row a) => RpcResultSet [a] where+  fromTokenStreams xs = case parse listOfRow xs of+                          [] -> error "fromTokenStreams(RpcResultSet [Row a]): failed to parse"+                          (x,_):_ -> x+++-- [TODO] use Template Haskell+instance (RpcResult a, RpcResult b) => RpcResultSet (a, b) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(RpcResultSet (RpcResult a, RpcResult b)): failed to parse"+                          (x,_):_ -> x+    where+      p :: (RpcResult a, RpcResult b) => Parser (a, b)+      p = do+        !r1 <- resultParser :: (RpcResult a) => Parser a+        !r2 <- resultParser :: (RpcResult b) => Parser b+        return  (r1,r2)++instance (RpcResult a, RpcResult b, RpcResult c) => RpcResultSet (a, b, c) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(RpcResultSet (RpcResult a, RpcResult b, RpcResult c)): failed to parse"+                          (x,_):_ -> x+    where+      p :: (RpcResult a, RpcResult b, RpcResult c) => Parser (a, b, c)+      p = do+        !r1 <- resultParser :: (RpcResult a) => Parser a+        !r2 <- resultParser :: (RpcResult b) => Parser b+        !r3 <- resultParser :: (RpcResult c) => Parser c+        return  (r1,r2,r3)++instance (RpcResult a, RpcResult b, RpcResult c, RpcResult d) => RpcResultSet (a, b, c, d) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(RpcResultSet (RpcResult a, RpcResult b, RpcResult c, RpcResult d)): failed to parse"+                          (x,_):_ -> x+    where+      p :: (RpcResult a, RpcResult b, RpcResult c, RpcResult d) => Parser (a, b, c, d)+      p = do+        !r1 <- resultParser :: (RpcResult a) => Parser a+        !r2 <- resultParser :: (RpcResult b) => Parser b+        !r3 <- resultParser :: (RpcResult c) => Parser c+        !r4 <- resultParser :: (RpcResult d) => Parser d+        return  (r1,r2,r3,r4)++instance (RpcResult a, RpcResult b, RpcResult c, RpcResult d, RpcResult e) => RpcResultSet (a, b, c, d, e) where+  fromTokenStreams xs = case parse p xs of+                          [] -> error "fromTokenStreams(RpcResultSet (RpcResult a, RpcResult b, RpcResult c, RpcResult d, RpcResult e)): failed to parse"+                          (x,_):_ -> x+    where+      p :: (RpcResult a, RpcResult b, RpcResult c, RpcResult d, RpcResult e) => Parser (a, b, c, d, e)+      p = do+        !r1 <- resultParser :: (RpcResult a) => Parser a+        !r2 <- resultParser :: (RpcResult b) => Parser b+        !r3 <- resultParser :: (RpcResult c) => Parser c+        !r4 <- resultParser :: (RpcResult d) => Parser d+        !r5 <- resultParser :: (RpcResult e) => Parser e+        return  (r1,r2,r3,r4,r5)++++class RpcResult a where+  resultParser :: Parser a++instance RpcResult () where+  resultParser = noResult++instance Row a => RpcResult [a] where+  resultParser = listOfRow++  ++++rvTypeInfo :: ReturnValue -> TypeInfo+rvTypeInfo (ReturnValue _ _ _ _ _ ti _) = ti++rvRawBytes :: ReturnValue -> RawBytes+rvRawBytes (ReturnValue _ _ _ _ _ _ rb) = rb+++class RpcOutputSet a where+  fromReturnValues :: [ReturnValue] -> a++instance RpcOutputSet () where+  fromReturnValues [] = ()+  fromReturnValues _ = error "fromReturnValues: List length must be 0"+  +-- [TODO] use Template Haskell+instance (Data a) => RpcOutputSet (Only a) where+  fromReturnValues [r1] = Only d1+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+  fromReturnValues _ = error "fromReturnValues: List length must be 1"++instance (Data a, Data b) => RpcOutputSet (a,b) where+  fromReturnValues [r1,r2] = (d1,d2)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+  fromReturnValues _ = error "fromReturnValues: List length must be 2"++instance (Data a, Data b, Data c) => RpcOutputSet (a,b,c) where+  fromReturnValues [r1,r2,r3] = (d1,d2,d3)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+  fromReturnValues _ = error "fromReturnValues: List length must be 3"++instance (Data a, Data b, Data c, Data d) => RpcOutputSet (a,b,c,d) where+  fromReturnValues [r1,r2,r3,r4] = (d1,d2,d3,d4)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+  fromReturnValues _ = error "fromReturnValues: List length must be 4"++instance (Data a, Data b, Data c, Data d, Data e) => RpcOutputSet (a,b,c,d,e) where+  fromReturnValues [r1,r2,r3,r4,r5] = (d1,d2,d3,d4,d5)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+  fromReturnValues _ = error "fromReturnValues: List length must be 5"++instance (Data a, Data b, Data c, Data d, Data e, Data f) => RpcOutputSet (a,b,c,d,e,f) where+  fromReturnValues [r1,r2,r3,r4,r5,r6] = (d1,d2,d3,d4,d5,d6)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+  fromReturnValues _ = error "fromReturnValues: List length must be 6"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g) => RpcOutputSet (a,b,c,d,e,f,g) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7] = (d1,d2,d3,d4,d5,d6,d7)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+  fromReturnValues _ = error "fromReturnValues: List length must be 7"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h) => RpcOutputSet (a,b,c,d,e,f,g,h) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8] = (d1,d2,d3,d4,d5,d6,d7,d8)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+  fromReturnValues _ = error "fromReturnValues: List length must be 8"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i) => RpcOutputSet (a,b,c,d,e,f,g,h,i) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9] = (d1,d2,d3,d4,d5,d6,d7,d8,d9)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+  fromReturnValues _ = error "fromReturnValues: List length must be 9"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+  fromReturnValues _ = error "fromReturnValues: List length must be 10"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+  fromReturnValues _ = error "fromReturnValues: List length must be 11"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+  fromReturnValues _ = error "fromReturnValues: List length must be 12"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+  fromReturnValues _ = error "fromReturnValues: List length must be 13"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+  fromReturnValues _ = error "fromReturnValues: List length must be 14"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+  fromReturnValues _ = error "fromReturnValues: List length must be 15"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+  fromReturnValues _ = error "fromReturnValues: List length must be 16"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+  fromReturnValues _ = error "fromReturnValues: List length must be 17"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+  fromReturnValues _ = error "fromReturnValues: List length must be 18"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+  fromReturnValues _ = error "fromReturnValues: List length must be 19"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+  fromReturnValues _ = error "fromReturnValues: List length must be 20"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+  fromReturnValues _ = error "fromReturnValues: List length must be 21"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)+  fromReturnValues _ = error "fromReturnValues: List length must be 22"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)+      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)+  fromReturnValues _ = error "fromReturnValues: List length must be 23"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)+      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)+      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)+  fromReturnValues _ = error "fromReturnValues: List length must be 24"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x, Data y) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)+      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)+      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)+      !d25 = fromRawBytes (rvTypeInfo r25) (rvRawBytes r25)+  fromReturnValues _ = error "fromReturnValues: List length must be 25"++instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x, Data y, Data z) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) where+  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26]+    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26)+    where+      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)+      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)+      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)+      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)+      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)+      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)+      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)+      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)+      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)+      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)+      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)+      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)+      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)+      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)+      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)+      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)+      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)+      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)+      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)+      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)+      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)+      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)+      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)+      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)+      !d25 = fromRawBytes (rvTypeInfo r25) (rvRawBytes r25)+      !d26 = fromRawBytes (rvTypeInfo r26) (rvRawBytes r26)+  fromReturnValues _ = error "fromReturnValues: List length must be 26"+
− src/Database/MSSQLServer/Query/RpcResultSet.hs
@@ -1,596 +0,0 @@-{-# OPTIONS_HADDOCK hide #-}-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleInstances #-}--module Database.MSSQLServer.Query.RpcResultSet ( RpcResultSet (..)-                                               , RpcResult (..)-                                               , RpcOutputSet (..)-                                               ) where--import Control.Applicative((<$>),(<*>))-import Database.Tds.Message-import Database.MSSQLServer.Query.ResultSet (ResultSet(..))-import Database.MSSQLServer.Query.Only-----class RpcResultSet a where-  fromListOfTokenStreams :: [[TokenStream]] -> a--instance (RpcOutputSet a1, ResultSet b1) => RpcResultSet (RpcResult a1 b1) where-  fromListOfTokenStreams [v1] = b1-    where-      !b1 = rpcResult v1-  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 1"-  -instance (RpcOutputSet a1, ResultSet b1, RpcOutputSet a2, ResultSet b2) => RpcResultSet (RpcResult a1 b1, RpcResult a2 b2) where-  fromListOfTokenStreams [v1,v2] =  (b1, b2)-    where-      !b1 = rpcResult v1-      !b2 = rpcResult v2-  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 2"--instance (RpcOutputSet a1, ResultSet b1, RpcOutputSet a2, ResultSet b2, RpcOutputSet a3, ResultSet b3) => RpcResultSet (RpcResult a1 b1, RpcResult a2 b2, RpcResult a3 b3) where-  fromListOfTokenStreams [v1,v2,v3] =  (b1, b2, b3)-    where-      !b1 = rpcResult v1-      !b2 = rpcResult v2-      !b3 = rpcResult v3-  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 3"--instance (RpcOutputSet a1, ResultSet b1, RpcOutputSet a2, ResultSet b2, RpcOutputSet a3, ResultSet b3, RpcOutputSet a4, ResultSet b4) => RpcResultSet (RpcResult a1 b1, RpcResult a2 b2, RpcResult a3 b3, RpcResult a4 b4) where-  fromListOfTokenStreams [v1,v2,v3,v4] =  (b1, b2, b3, b4)-    where-      !b1 = rpcResult v1-      !b2 = rpcResult v2-      !b3 = rpcResult v3-      !b4 = rpcResult v4-  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 4"--instance (RpcOutputSet a1, ResultSet b1, RpcOutputSet a2, ResultSet b2, RpcOutputSet a3, ResultSet b3, RpcOutputSet a4, ResultSet b4, RpcOutputSet a5, ResultSet b5) => RpcResultSet (RpcResult a1 b1, RpcResult a2 b2, RpcResult a3 b3, RpcResult a4 b4, RpcResult a5 b5) where-  fromListOfTokenStreams [v1,v2,v3,v4,v5] =  (b1, b2, b3, b4, b5)-    where-      !b1 = rpcResult v1-      !b2 = rpcResult v2-      !b3 = rpcResult v3-      !b4 = rpcResult v4-      !b5 = rpcResult v5-  fromListOfTokenStreams _ = error "fromListOfTokenStreams: List length must be 5"------- (RpcOutputSet a, ResultSet b) => -data RpcResult a b = RpcResult Int a b-                   deriving (Show)--rpcResult :: (RpcOutputSet a, ResultSet b) => [TokenStream] -> RpcResult a b-rpcResult tss =-  let [TSReturnStatus ret] = case filter isTSReturnStatus tss of-                               [] -> error "rpcResult: TSReturnStatus is necessary"-                               xs -> xs-      rvs = (\(TSReturnValue rv) -> rv) <$> filter isTSReturnValue tss-      rss = fromTokenStreams tss--  in RpcResult (fromIntegral ret) (fromReturnValues rvs) rss--  where-    isTSReturnStatus :: TokenStream -> Bool-    isTSReturnStatus (TSReturnStatus{}) = True-    isTSReturnStatus _ = False-    -    isTSReturnValue :: TokenStream -> Bool-    isTSReturnValue (TSReturnValue{}) = True-    isTSReturnValue _ = False---  ---rvTypeInfo :: ReturnValue -> TypeInfo-rvTypeInfo (ReturnValue _ _ _ _ _ ti _) = ti--rvRawBytes :: ReturnValue -> RawBytes-rvRawBytes (ReturnValue _ _ _ _ _ _ rb) = rb---class RpcOutputSet a where-  fromReturnValues :: [ReturnValue] -> a--instance RpcOutputSet () where-  fromReturnValues [] = ()-  fromReturnValues _ = error "fromReturnValues: List length must be 0"-  -instance (Data a) => RpcOutputSet (Only a) where-  fromReturnValues [r1] = Only d1-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-  fromReturnValues _ = error "fromReturnValues: List length must be 1"--instance (Data a, Data b) => RpcOutputSet (a,b) where-  fromReturnValues [r1,r2] = (d1,d2)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-  fromReturnValues _ = error "fromReturnValues: List length must be 2"--instance (Data a, Data b, Data c) => RpcOutputSet (a,b,c) where-  fromReturnValues [r1,r2,r3] = (d1,d2,d3)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-  fromReturnValues _ = error "fromReturnValues: List length must be 3"--instance (Data a, Data b, Data c, Data d) => RpcOutputSet (a,b,c,d) where-  fromReturnValues [r1,r2,r3,r4] = (d1,d2,d3,d4)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-  fromReturnValues _ = error "fromReturnValues: List length must be 4"--instance (Data a, Data b, Data c, Data d, Data e) => RpcOutputSet (a,b,c,d,e) where-  fromReturnValues [r1,r2,r3,r4,r5] = (d1,d2,d3,d4,d5)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-  fromReturnValues _ = error "fromReturnValues: List length must be 5"--instance (Data a, Data b, Data c, Data d, Data e, Data f) => RpcOutputSet (a,b,c,d,e,f) where-  fromReturnValues [r1,r2,r3,r4,r5,r6] = (d1,d2,d3,d4,d5,d6)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-  fromReturnValues _ = error "fromReturnValues: List length must be 6"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g) => RpcOutputSet (a,b,c,d,e,f,g) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7] = (d1,d2,d3,d4,d5,d6,d7)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-  fromReturnValues _ = error "fromReturnValues: List length must be 7"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h) => RpcOutputSet (a,b,c,d,e,f,g,h) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8] = (d1,d2,d3,d4,d5,d6,d7,d8)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-  fromReturnValues _ = error "fromReturnValues: List length must be 8"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i) => RpcOutputSet (a,b,c,d,e,f,g,h,i) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9] = (d1,d2,d3,d4,d5,d6,d7,d8,d9)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-  fromReturnValues _ = error "fromReturnValues: List length must be 9"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-  fromReturnValues _ = error "fromReturnValues: List length must be 10"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-  fromReturnValues _ = error "fromReturnValues: List length must be 11"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-  fromReturnValues _ = error "fromReturnValues: List length must be 12"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-  fromReturnValues _ = error "fromReturnValues: List length must be 13"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-  fromReturnValues _ = error "fromReturnValues: List length must be 14"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15] = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-  fromReturnValues _ = error "fromReturnValues: List length must be 15"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-  fromReturnValues _ = error "fromReturnValues: List length must be 16"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-  fromReturnValues _ = error "fromReturnValues: List length must be 17"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-  fromReturnValues _ = error "fromReturnValues: List length must be 18"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-  fromReturnValues _ = error "fromReturnValues: List length must be 19"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-  fromReturnValues _ = error "fromReturnValues: List length must be 20"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-  fromReturnValues _ = error "fromReturnValues: List length must be 21"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)-  fromReturnValues _ = error "fromReturnValues: List length must be 22"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)-      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)-  fromReturnValues _ = error "fromReturnValues: List length must be 23"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)-      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)-      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)-  fromReturnValues _ = error "fromReturnValues: List length must be 24"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x, Data y) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)-      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)-      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)-      !d25 = fromRawBytes (rvTypeInfo r25) (rvRawBytes r25)-  fromReturnValues _ = error "fromReturnValues: List length must be 25"--instance (Data a, Data b, Data c, Data d, Data e, Data f, Data g, Data h, Data i, Data j, Data k, Data l, Data m, Data n, Data o, Data p, Data q, Data r, Data s, Data t, Data u, Data v, Data w, Data x, Data y, Data z) => RpcOutputSet (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) where-  fromReturnValues [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26]-    = (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26)-    where-      !d1 = fromRawBytes (rvTypeInfo r1) (rvRawBytes r1)-      !d2 = fromRawBytes (rvTypeInfo r2) (rvRawBytes r2)-      !d3 = fromRawBytes (rvTypeInfo r3) (rvRawBytes r3)-      !d4 = fromRawBytes (rvTypeInfo r4) (rvRawBytes r4)-      !d5 = fromRawBytes (rvTypeInfo r5) (rvRawBytes r5)-      !d6 = fromRawBytes (rvTypeInfo r6) (rvRawBytes r6)-      !d7 = fromRawBytes (rvTypeInfo r7) (rvRawBytes r7)-      !d8 = fromRawBytes (rvTypeInfo r8) (rvRawBytes r8)-      !d9 = fromRawBytes (rvTypeInfo r9) (rvRawBytes r9)-      !d10 = fromRawBytes (rvTypeInfo r10) (rvRawBytes r10)-      !d11 = fromRawBytes (rvTypeInfo r11) (rvRawBytes r11)-      !d12 = fromRawBytes (rvTypeInfo r12) (rvRawBytes r12)-      !d13 = fromRawBytes (rvTypeInfo r13) (rvRawBytes r13)-      !d14 = fromRawBytes (rvTypeInfo r14) (rvRawBytes r14)-      !d15 = fromRawBytes (rvTypeInfo r15) (rvRawBytes r15)-      !d16 = fromRawBytes (rvTypeInfo r16) (rvRawBytes r16)-      !d17 = fromRawBytes (rvTypeInfo r17) (rvRawBytes r17)-      !d18 = fromRawBytes (rvTypeInfo r18) (rvRawBytes r18)-      !d19 = fromRawBytes (rvTypeInfo r19) (rvRawBytes r19)-      !d20 = fromRawBytes (rvTypeInfo r20) (rvRawBytes r20)-      !d21 = fromRawBytes (rvTypeInfo r21) (rvRawBytes r21)-      !d22 = fromRawBytes (rvTypeInfo r22) (rvRawBytes r22)-      !d23 = fromRawBytes (rvTypeInfo r23) (rvRawBytes r23)-      !d24 = fromRawBytes (rvTypeInfo r24) (rvRawBytes r24)-      !d25 = fromRawBytes (rvTypeInfo r25) (rvRawBytes r25)-      !d26 = fromRawBytes (rvTypeInfo r26) (rvRawBytes r26)-  fromReturnValues _ = error "fromReturnValues: List length must be 26"-
+ src/Database/MSSQLServer/Query/TokenStreamParser.hs view
@@ -0,0 +1,146 @@+{-# OPTIONS_HADDOCK hide #-}++module Database.MSSQLServer.Query.TokenStreamParser ( Parser(..)+                                                    , parse+                                                    , item+                                                    , satisfy+                                                    , many+                                                    , many1+                                                    , oneOf+                                                    , noneOf+                                                    , noResult+                                                    , listOfRow+                                                    , rowCount+                                                    ) where+++import Control.Applicative((<$>))+import Control.Applicative(Applicative((<*>),pure),Alternative((<|>),empty))+import Control.Monad(Monad(..))+import Data.Monoid (mconcat,(<>),All(..),Any(..))++import Database.Tds.Message+import Database.MSSQLServer.Query.Row++++data Parser a = Parser ([TokenStream] -> [(a,[TokenStream])])++parse :: Parser a -> [TokenStream] -> [(a,[TokenStream])]+parse (Parser p) = p+++instance Functor Parser where+  fmap f p = Parser $ \xs -> [(f x,xs') | (x,xs') <- parse p xs]++instance Applicative Parser where+  pure x = Parser $ \xs -> [(x,xs)]+  (<*>) f p = Parser $ \xs -> [(f' x,xs'') | (x,xs') <- parse p xs, (f',xs'') <- parse f xs']++instance Alternative Parser where+  empty = Parser $ \_ -> []+  (<|>) p q = Parser $ \xs -> parse p xs <> parse q xs++instance Monad Parser where+  return = pure+  p >>= f  = Parser $ \ts -> mconcat [parse (f t) ts' | (t,ts') <- parse p ts]+++item :: Parser TokenStream+item = Parser $ \xs -> case xs of+                         [] -> []+                         (x:xs') -> [(x,xs')]++satisfy :: (TokenStream -> Bool) -> Parser TokenStream+satisfy f = do x <- item+               if f x+                 then return x+                 else empty++many :: Parser a -> Parser [a]+many p = many1 p <|> return []++many1 :: Parser a -> Parser [a]+many1 p = do a <- p+             as <- many p+             return $ a:as++oneOf :: [TokenStream -> Bool] -> Parser TokenStream+oneOf xs = satisfy $ \x -> getAny $ mconcat $ (\f -> Any $ f x) <$> xs++noneOf :: [TokenStream -> Bool] -> Parser TokenStream+noneOf xs = satisfy $ \x -> getAll $ mconcat $ (\f -> All $ not $ f x) <$> xs+++noResult :: Parser ()+noResult = do+  _ <- many $ satisfy $ not . isTSDone+  _ <- satisfy isTSDone -- [MEMO] just parse here+  return ()+    where++      -- [TODO] check Status contains 0x10+      isTSDone :: TokenStream -> Bool+      isTSDone (TSDone{}) = True+      isTSDone (TSDoneInProc{}) = True+      isTSDone _ = False+  ++listOfRow :: Row a => Parser ([a])+listOfRow = do+  _ <- many $ satisfy $ not . isTSColMetaData+  tsCmd <- satisfy isTSColMetaData+  _ <- many $ satisfy $ not . isTSRow+  tsRows <- many $ satisfy isTSRow+  _ <- many $ satisfy $ not . isTSDone+  _ <- satisfy isTSDone -- [MEMO] just parse here+  return $+    let+      (TSColMetaData (maybeCmd)) = tsCmd+      mcds = case (\(ColMetaData x) -> x) <$> maybeCmd of+               Nothing -> error "listOfRow: ColMetaData is necessary"+               Just mcds' -> mcds'+      rows = (\(TSRow row) -> getRawBytes <$> row) <$> tsRows+    in fromListOfRawBytes mcds <$> rows+    where++      isTSColMetaData :: TokenStream -> Bool+      isTSColMetaData (TSColMetaData{}) = True+      isTSColMetaData _ = False++      isTSRow :: TokenStream -> Bool+      isTSRow (TSRow{}) = True+      isTSRow _ = False++      -- [TODO] check Status contains 0x10+      isTSDone :: TokenStream -> Bool+      isTSDone (TSDone{}) = True+      isTSDone (TSDoneInProc{}) = True+      isTSDone _ = False++      getRawBytes :: RowColumnData -> RawBytes+      getRawBytes (RCDOrdinal dt) = dt+      getRawBytes (RCDLarge _ _ dt) = dt+++rowCount :: Parser Int+rowCount = do+  _ <- many $ satisfy $ not . isTSDone+  tsDone <- satisfy isTSDone+  return $+    let+      Done _ _ rc = getDone tsDone+    in fromIntegral rc+    where++      -- [TODO] check Status contains 0x10+      isTSDone :: TokenStream -> Bool+      isTSDone (TSDone{}) = True+      isTSDone (TSDoneInProc{}) = True+      isTSDone _ = False++      getDone :: TokenStream -> Done+      getDone (TSDone x) = x+      getDone (TSDoneInProc x) = x+      getDone _ = error "rowCount: TSDone and TSDoneInProc are only possible here"+