{-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-} module Database.MSSQLServer.Query.Template ( rowTupleQ , resultSetTupleQ , rpcResponseSetTupleQ , rpcOutputSetTupleQ , rpcResultSetTupleQ , rpcQuerySetTupleQ , rpcParamSetTupleQ ) where import Data.Monoid((<>)) import Database.Tds.Message import Language.Haskell.TH import Data.List (foldl') rowTupleQ :: Int -> Q Dec rowTupleQ :: Int -> Q Dec rowTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rowTuple Int n rowTuple :: Int -> Dec rowTuple :: Int -> Dec rowTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Type) -> [Int] -> Cxt forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) [Int 1..Int n]) #else (map (\i ->ClassP ''Data [(VarT (mkName $ "a" <> show i))]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "Row")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Int -> Type TupleT Int n) [Int 1..Int n])) [Name -> [Clause] -> Dec FunD (String -> Name mkName String "fromListOfRawBytes") [ [Pat] -> Body -> [Dec] -> Clause Clause [ [Pat] -> Pat ListP ((Int -> Pat) -> [Int] -> [Pat] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "m" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) , [Pat] -> Pat ListP ((Int -> Pat) -> [Int] -> [Pat] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) ] #if MIN_VERSION_template_haskell(2,16,0) (Exp -> Body NormalB ([Maybe Exp] -> Exp TupE ((Int -> Maybe Exp) -> [Int] -> [Maybe Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Exp -> Maybe Exp forall a. a -> Maybe a Just (Exp -> Maybe Exp) -> Exp -> Maybe Exp forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) #else (NormalB (TupE (map (\i ->VarE (mkName $ "d" <> show i)) [1..n]) )) #endif ((Int -> Dec) -> [Int] -> [Dec] forall a b. (a -> b) -> [a] -> [b] map Int -> Dec d [Int 1..Int n]) , [Pat] -> Body -> [Dec] -> Clause Clause [Pat WildP,Pat WildP] (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'error) (Lit -> Exp LitE (String -> Lit StringL (String "fromListOfRawBytes: List length must be " String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int n))) ) ) [] ] ] where d :: Int -> Dec d :: Int -> Dec d Int i = Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'fromRawBytes) (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "mcdTypeInfo")) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "m" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) ) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) ) ) [] resultSetTupleQ :: Int -> Q Dec resultSetTupleQ :: Int -> Q Dec resultSetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec resultSetTuple Int n resultSetTuple :: Int -> Dec resultSetTuple :: Int -> Dec resultSetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Type) -> [Int] -> Cxt forall a b. (a -> b) -> [a] -> [b] map (\Int i->Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "Result")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> (Int -> String forall a. Show a => a -> String show Int i)))) [Int 1..Int n]) #else (map (\i ->ClassP (mkName "Result") [(VarT (mkName $ "a" <> show i))]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "ResultSet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Int -> Type TupleT Int n) [Int 1..Int n])) [Pat -> Body -> [Dec] -> Dec ValD (Name -> Pat VarP (String -> Name mkName String "resultSetParser")) (Exp -> Body NormalB ([Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) Nothing #endif ( (((Int -> Stmt) -> [Int] -> [Stmt]) -> [Int] -> (Int -> Stmt) -> [Stmt] forall a b c. (a -> b -> c) -> b -> a -> c flip (Int -> Stmt) -> [Int] -> [Stmt] forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] ((Int -> Stmt) -> [Stmt]) -> (Int -> Stmt) -> [Stmt] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i ))) (Exp -> Type -> Exp SigE (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "resultParser")) (if Int iInt -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int n then (Name -> Exp ConE 'True) else (Name -> Exp ConE 'False)) ) ([TyVarBndr] -> Cxt -> Type -> Type ForallT #if MIN_VERSION_template_haskell(2,17,0) [PlainTV (mkName $ "a" <> show i) SpecifiedSpec] #else [Name -> TyVarBndr PlainTV (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)] #endif #if MIN_VERSION_template_haskell(2,10,0) [Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "Result")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))] #else [ClassP (mkName "Result") [VarT (mkName $ "a" <> show i)]] #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "Parser'")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) ) ) ) [Stmt] -> [Stmt] -> [Stmt] forall a. Semigroup a => a -> a -> a <> #if MIN_VERSION_template_haskell(2,16,0) [(Exp -> Stmt NoBindS (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'return) ([Maybe Exp] -> Exp TupE ((Int -> Maybe Exp) -> [Int] -> [Maybe Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Exp -> Maybe Exp forall a. a -> Maybe a Just (Exp -> Maybe Exp) -> Exp -> Maybe Exp forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) )] #else [(NoBindS (AppE (VarE 'return) (TupE (map (\i->VarE (mkName $ "r" <> show i)) [1..n]) )) )] #endif ) ) ) [] ] rpcResponseSetTupleQ :: Int -> Q Dec rpcResponseSetTupleQ :: Int -> Q Dec rpcResponseSetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rpcResponseSetTuple Int n rpcResponseSetTuple :: Int -> Dec rpcResponseSetTuple :: Int -> Dec rpcResponseSetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Cxt) -> [Int] -> Cxt forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap (\Int i->[Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcOutputSet")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) ,Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResultSet")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) ]) [Int 1..Int n]) #else (concatMap (\i->[ClassP (mkName "RpcOutputSet") [(VarT (mkName $ "a" <> show i))] ,ClassP (mkName "RpcResultSet") [(VarT (mkName $ "b" <> show i))] ]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResponseSet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Type -> Type -> Type AppT (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResponse")) (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Name -> Type VarT (String -> Name mkName (String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) )) ) (Int -> Type TupleT Int n) [Int 1..Int n])) [Pat -> Body -> [Dec] -> Dec ValD (Name -> Pat VarP (String -> Name mkName String "rpcResponseSetParser")) (Exp -> Body NormalB ([Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) Nothing #endif ( (((Int -> Stmt) -> [Int] -> [Stmt]) -> [Int] -> (Int -> Stmt) -> [Stmt] forall a b c. (a -> b -> c) -> b -> a -> c flip (Int -> Stmt) -> [Int] -> [Stmt] forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] ((Int -> Stmt) -> [Stmt]) -> (Int -> Stmt) -> [Stmt] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i ))) (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "rpcResponseParser")) (if Int iInt -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int n then (Name -> Exp ConE 'True) else (Name -> Exp ConE 'False))) ) [Stmt] -> [Stmt] -> [Stmt] forall a. Semigroup a => a -> a -> a <> #if MIN_VERSION_template_haskell(2,16,0) [(Exp -> Stmt NoBindS (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'return) ([Maybe Exp] -> Exp TupE ((Int -> Maybe Exp) -> [Int] -> [Maybe Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Exp -> Maybe Exp forall a. a -> Maybe a Just (Exp -> Maybe Exp) -> Exp -> Maybe Exp forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) )] #else [(NoBindS (AppE (VarE 'return) (TupE (map (\i->VarE (mkName $ "r" <> show i)) [1..n]) )) )] #endif ) ) ) [] ] rpcOutputSetTupleQ :: Int -> Q Dec rpcOutputSetTupleQ :: Int -> Q Dec rpcOutputSetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rpcOutputSetTuple Int n rpcOutputSetTuple :: Int -> Dec rpcOutputSetTuple :: Int -> Dec rpcOutputSetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Type) -> [Int] -> Cxt forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) [Int 1..Int n]) #else (map (\i ->ClassP ''Data [(VarT (mkName $ "a" <> show i))]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcOutputSet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Int -> Type TupleT Int n) [Int 1..Int n]) ) [Name -> [Clause] -> Dec FunD (String -> Name mkName String "fromReturnValues") [[Pat] -> Body -> [Dec] -> Clause Clause [[Pat] -> Pat ListP ((Int -> Pat) -> [Int] -> [Pat] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n])] #if MIN_VERSION_template_haskell(2,16,0) (Exp -> Body NormalB ([Maybe Exp] -> Exp TupE ((Int -> Maybe Exp) -> [Int] -> [Maybe Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Exp -> Maybe Exp forall a. a -> Maybe a Just (Exp -> Maybe Exp) -> Exp -> Maybe Exp forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]))) #else (NormalB (TupE (map (\i ->VarE (mkName $ "d" <> show i)) [1..n]))) #endif ((Int -> Dec) -> [Int] -> [Dec] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "fromRawBytes")) (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "rvTypeInfo")) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) ) (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "rvRawBytes")) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) ) [] ) [Int 1..Int n] ) ,[Pat] -> Body -> [Dec] -> Clause Clause [Pat WildP] (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'error) (Lit -> Exp LitE (String -> Lit StringL (String -> Lit) -> String -> Lit forall a b. (a -> b) -> a -> b $ String "fromReturnValues: List length must be " String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int n)))) [] ] ] rpcResultSetTupleQ :: Int -> Q Dec rpcResultSetTupleQ :: Int -> Q Dec rpcResultSetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rpcResultSetTuple Int n rpcResultSetTuple :: Int -> Dec rpcResultSetTuple :: Int -> Dec rpcResultSetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Type) -> [Int] -> Cxt forall a b. (a -> b) -> [a] -> [b] map (\Int i->Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResult")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> (Int -> String forall a. Show a => a -> String show Int i)))) [Int 1..Int n]) #else (map (\i ->ClassP (mkName "RpcResult") [(VarT (mkName $ "a" <> show i))]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResultSet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Int -> Type TupleT Int n) [Int 1..Int n])) [Pat -> Body -> [Dec] -> Dec ValD (Name -> Pat VarP (String -> Name mkName String "rpcResultSetParser")) (Exp -> Body NormalB ([Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) Nothing #endif ( (((Int -> Stmt) -> [Int] -> [Stmt]) -> [Int] -> (Int -> Stmt) -> [Stmt] forall a b c. (a -> b -> c) -> b -> a -> c flip (Int -> Stmt) -> [Int] -> [Stmt] forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] ((Int -> Stmt) -> [Stmt]) -> (Int -> Stmt) -> [Stmt] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i ))) (Exp -> Type -> Exp SigE (Name -> Exp VarE (String -> Name mkName String "rpcResultParser")) ([TyVarBndr] -> Cxt -> Type -> Type ForallT #if MIN_VERSION_template_haskell(2,17,0) [PlainTV (mkName $ "a" <> show i) SpecifiedSpec] #else [Name -> TyVarBndr PlainTV (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)] #endif #if MIN_VERSION_template_haskell(2,10,0) [Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcResult")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))] #else [ClassP (mkName "RpcResult") [VarT (mkName $ "a" <> show i)]] #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "Parser'")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) ) ) ) [Stmt] -> [Stmt] -> [Stmt] forall a. Semigroup a => a -> a -> a <> #if MIN_VERSION_template_haskell(2,16,0) [(Exp -> Stmt NoBindS (Exp -> Exp -> Exp AppE (Name -> Exp VarE 'return) ([Maybe Exp] -> Exp TupE ((Int -> Maybe Exp) -> [Int] -> [Maybe Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Exp -> Maybe Exp forall a. a -> Maybe a Just (Exp -> Maybe Exp) -> Exp -> Maybe Exp forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) )] #else [(NoBindS (AppE (VarE 'return) (TupE (map (\i->VarE (mkName $ "r" <> show i)) [1..n]) )) )] #endif ) ) ) [] ] rpcQuerySetTupleQ :: Int -> Q Dec rpcQuerySetTupleQ :: Int -> Q Dec rpcQuerySetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rpcQuerySetTuple Int n rpcQuerySetTuple :: Int -> Dec rpcQuerySetTuple :: Int -> Dec rpcQuerySetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Cxt) -> [Int] -> Cxt forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap (\Int i->[Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcQueryId")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) ,Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcParamSet")) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) ]) [Int 1..Int n]) #else (concatMap (\i->[ClassP (mkName "RpcQueryId") [(VarT (mkName $ "a" <> show i))] ,ClassP (mkName "RpcParamSet") [(VarT (mkName $ "b" <> show i))] ]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcQuerySet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Type -> Type -> Type AppT (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcQuery")) (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) (Name -> Type VarT (String -> Name mkName (String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) )) ) (Int -> Type TupleT Int n) [Int 1..Int n])) [Name -> [Clause] -> Dec FunD (String -> Name mkName String "toRpcRequest") [[Pat] -> Body -> [Dec] -> Clause Clause [[Pat] -> Pat TupP ((Int -> Pat) -> [Int] -> [Pat] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> [Pat] -> Pat ConP (String -> Name mkName String "RpcQuery") [Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i),Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)]) [Int 1..Int n]) ] (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Name -> Exp ConE (String -> Name mkName String "RpcRequest")) ([Exp] -> Exp ListE ((Int -> Exp) -> [Int] -> [Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n])))) ((Int -> Dec) -> [Int] -> [Dec] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "r" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "toRpcReqBatch")) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "b" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) []) [Int 1..Int n]) ] ] rpcParamSetTupleQ :: Int -> Q Dec rpcParamSetTupleQ :: Int -> Q Dec rpcParamSetTupleQ Int n = Dec -> Q Dec forall (m :: * -> *) a. Monad m => a -> m a return (Dec -> Q Dec) -> Dec -> Q Dec forall a b. (a -> b) -> a -> b $ Int -> Dec rpcParamSetTuple Int n rpcParamSetTuple :: Int -> Dec rpcParamSetTuple :: Int -> Dec rpcParamSetTuple Int n = #if MIN_VERSION_template_haskell(2,11,0) Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec InstanceD Maybe Overlap forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) ((Int -> Type) -> [Int] -> Cxt forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) [Int 1..Int n]) #else (map (\i ->ClassP ''Data [(VarT (mkName $ "a" <> show i))]) [1..n]) #endif (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcParamSet")) ((Type -> Int -> Type) -> Type -> [Int] -> Type forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl' (\Type x Int i -> Type -> Type -> Type AppT Type x (Type -> Type -> Type AppT (Name -> Type ConT (String -> Name mkName String "RpcParam")) (Name -> Type VarT (String -> Name mkName (String "a" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) ) ) (Int -> Type TupleT Int n) [Int 1..Int n])) [Name -> [Clause] -> Dec FunD (String -> Name mkName String "toRpcReqBatchParams") [[Pat] -> Body -> [Dec] -> Clause Clause [[Pat] -> Pat TupP ((Int -> Pat) -> [Int] -> [Pat] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n])] (Exp -> Body NormalB ([Exp] -> Exp ListE ((Int -> Exp) -> [Int] -> [Exp] forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "p" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) ((Int -> Dec) -> [Int] -> [Dec] forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "p" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i))) (Exp -> Body NormalB (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "rpcReqBatchParam")) (Name -> Exp VarE (String -> Name mkName (String -> Name) -> String -> Name forall a b. (a -> b) -> a -> b $ String "d" String -> String -> String forall a. Semigroup a => a -> a -> a <> Int -> String forall a. Show a => a -> String show Int i)))) []) [Int 1..Int n]) ] ]