{-# 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 = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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")) (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" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "m" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)) [Int 1..Int n]) , [Pat] -> Pat ListP (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> 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 (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 " forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "m" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i))) ) (Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)) ) ) [] resultSetTupleQ :: Int -> Q Dec resultSetTupleQ :: Int -> Q Dec resultSetTupleQ Int n = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> (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")) (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" forall a. Semigroup a => a -> a -> a <> 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 (Maybe ModName -> [Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) forall a. Maybe a Nothing #endif ( (forall a b c. (a -> b -> c) -> b -> a -> c flip forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 iforall a. Eq a => a -> a -> Bool ==Int n then (Name -> Exp ConE 'True) else (Name -> Exp ConE 'False)) ) ([TyVarBndr Specificity] -> Cxt -> Type -> Type ForallT #if MIN_VERSION_template_haskell(2,17,0) [forall flag. Name -> flag -> TyVarBndr flag PlainTV (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i) Specificity SpecifiedSpec] #else [PlainTV (mkName $ "a" <> show 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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i))) ) ) ) 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> 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")) (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" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)))) (Name -> Type VarT (String -> Name mkName (String "b" forall a. Semigroup a => a -> a -> a <> 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 (Maybe ModName -> [Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) forall a. Maybe a Nothing #endif ( (forall a b c. (a -> b -> c) -> b -> a -> c flip forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i ))) (Exp -> Exp -> Exp AppE (Name -> Exp VarE (String -> Name mkName String "rpcResponseParser")) (if Int iforall a. Eq a => a -> a -> Bool ==Int n then (Name -> Exp ConE 'True) else (Name -> Exp ConE 'False))) ) 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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")) (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" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "fromReturnValues: List length must be " forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int n)))) [] ] ] rpcResultSetTupleQ :: Int -> Q Dec rpcResultSetTupleQ :: Int -> Q Dec rpcResultSetTupleQ Int n = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> (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")) (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" forall a. Semigroup a => a -> a -> a <> 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 (Maybe ModName -> [Stmt] -> Exp DoE #if MIN_VERSION_template_haskell(2,17,0) forall a. Maybe a Nothing #endif ( (forall a b c. (a -> b -> c) -> b -> a -> c flip forall a b. (a -> b) -> [a] -> [b] map [Int 1..Int n] forall a b. (a -> b) -> a -> b $ \Int i -> Pat -> Exp -> Stmt BindS (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i ))) (Exp -> Type -> Exp SigE (Name -> Exp VarE (String -> Name mkName String "rpcResultParser")) ([TyVarBndr Specificity] -> Cxt -> Type -> Type ForallT #if MIN_VERSION_template_haskell(2,17,0) [forall flag. Name -> flag -> TyVarBndr flag PlainTV (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i) Specificity SpecifiedSpec] #else [PlainTV (mkName $ "a" <> show 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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i))) ) ) ) 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> 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")) (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" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)))) (Name -> Type VarT (String -> Name mkName (String "b" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> Cxt -> [Pat] -> Pat ConP (String -> Name mkName String "RpcQuery") #if MIN_VERSION_template_haskell(2,18,0) [] #endif [Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i),Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)) [Int 1..Int n])))) (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "r" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i))) (Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "b" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)))) []) [Int 1..Int n]) ] ] rpcParamSetTupleQ :: Int -> Q Dec rpcParamSetTupleQ :: Int -> Q Dec rpcParamSetTupleQ Int n = forall (m :: * -> *) a. Monad m => a -> m a return 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 forall a. Maybe a Nothing #else InstanceD #endif #if MIN_VERSION_template_haskell(2,10,0) (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Type -> Type -> Type AppT (Name -> Type ConT ''Data) (Name -> Type VarT (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "a" forall a. Semigroup a => a -> a -> a <> 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")) (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" forall a. Semigroup a => a -> a -> a <> 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 (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)) [Int 1..Int n])] (Exp -> Body NormalB ([Exp] -> Exp ListE (forall a b. (a -> b) -> [a] -> [b] map (\Int i ->Name -> Exp VarE (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "p" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)) [Int 1..Int n]) )) (forall a b. (a -> b) -> [a] -> [b] map (\Int i->Pat -> Body -> [Dec] -> Dec ValD (Pat -> Pat BangP (Name -> Pat VarP (String -> Name mkName forall a b. (a -> b) -> a -> b $ String "p" forall a. Semigroup a => a -> a -> a <> 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 forall a b. (a -> b) -> a -> b $ String "d" forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show Int i)))) []) [Int 1..Int n]) ] ]