ngx-export 1.7.8 → 1.7.9
raw patch · 3 files changed
+69/−62 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- Changelog.md +5/−0
- NgxExport.hs +62/−58
- ngx-export.cabal +2/−4
Changelog.md view
@@ -1,3 +1,8 @@+### 1.7.9++- Reify types of internal handlers from their signatures.+- Dropped support for GHC versions older than *8.2*.+ ### 1.7.8 - Refactored to avoid using *head* and *tail* as it triggers *x-partial*
NgxExport.hs view
@@ -100,20 +100,16 @@ pattern I :: (Num i, Integral j) => i -> j pattern I i <- (fromIntegral -> i)-#if MIN_TOOL_VERSION_ghc(8,2,1) {-# COMPLETE I :: Int #-} {-# COMPLETE I :: CInt #-} {-# COMPLETE I :: CSize #-}-#endif pattern PtrLen :: Num l => Ptr s -> l -> (Ptr s, Int) pattern PtrLen s l <- (s, I l) pattern ToBool :: (Num i, Eq i) => Bool -> i pattern ToBool b <- (toBool -> b)-#if MIN_TOOL_VERSION_ghc(8,2,1) {-# COMPLETE ToBool :: CUInt #-}-#endif -- | The /4-tuple/ contains -- /(content, content-type, HTTP-status, response-headers)/.@@ -255,21 +251,28 @@ ++ map (\(c, t) -> tySynD (mkName $ nameBase c) [] $ return t) tCons -ngxExport' :: (Name -> Q Exp) ->- Name -> Name -> Name -> Q Type -> Name -> Q [Dec]-ngxExport' m e a h t f = sequence- [sigD nameFt typeFt- ,funD nameFt $ body [|exportType $cefVar|]- ,ForeignD . ExportF CCall ftName nameFt <$> typeFt- ,sigD nameFta typeFta- ,funD nameFta $ body [|exportTypeAmbiguity $(conE a)|]- ,ForeignD . ExportF CCall ftaName nameFta <$> typeFta- ,sigD nameF t- ,funD nameF $ body [|$(varE h) $efVar|]- ,ForeignD . ExportF CCall fName nameF <$> t- ]- where efVar = m f- cefVar = conE e `appE` efVar+-- Exporter -> Ambiguity -> Handler impl -> Handler name (Function) -> Decls+type NgxExportDec = Name -> Name -> Name -> Name -> Q [Dec]++ngxExport' :: (Name -> Q Exp) -> NgxExportDec+ngxExport' mode e a h f = do+#if MIN_VERSION_template_haskell(2,16,0)+ AppT (AppT ArrowT _) typeF@(ConT _) <- reifyType h+#else+ VarI _ (AppT (AppT ArrowT _) typeF@(ConT _)) _ <- reify h+#endif+ sequence+ [sigD nameFt typeFt+ ,funD nameFt $ body [|exportType $(conE e `appE` modeF)|]+ ,export ftName nameFt <$> typeFt+ ,sigD nameFta typeFta+ ,funD nameFta $ body [|exportTypeAmbiguity $(conE a)|]+ ,export ftaName nameFta <$> typeFta+ ,sigD nameF $ return typeF+ ,funD nameF $ body [|$(varE h) $modeF|]+ ,return $ export fName nameF typeF+ ]+ where modeF = mode f fName = "ngx_hs_" ++ nameBase f nameF = mkName fName ftName = "type_" ++ fName@@ -279,11 +282,12 @@ nameFta = mkName ftaName typeFta = [t|IO CInt|] body b = [clause [] (normalB b) []]+ export = ((ForeignD .) .) . ExportF CCall -ngxExport :: Name -> Name -> Name -> Q Type -> Name -> Q [Dec]+ngxExport :: NgxExportDec ngxExport = ngxExport' varE -ngxExportC :: Name -> Name -> Name -> Q Type -> Name -> Q [Dec]+ngxExportC :: NgxExportDec ngxExportC = ngxExport' $ infixE (Just $ varE 'const) (varE '(.)) . Just . varE -- $exporters@@ -383,8 +387,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportSS :: Name -> Q [Dec]-ngxExportSS = ngxExport 'SS 'Unambiguous- 'sS [t|SSImpl|]+ngxExportSS =+ ngxExport 'SS 'Unambiguous 'sS -- | Exports a function of type --@@ -394,8 +398,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportSSS :: Name -> Q [Dec]-ngxExportSSS = ngxExport 'SSS 'Unambiguous- 'sSS [t|SSSImpl|]+ngxExportSSS =+ ngxExport 'SSS 'Unambiguous 'sSS -- | Exports a function of type --@@ -405,8 +409,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportSLS :: Name -> Q [Dec]-ngxExportSLS = ngxExport 'SLS 'Unambiguous- 'sLS [t|SLSImpl|]+ngxExportSLS =+ ngxExport 'SLS 'Unambiguous 'sLS -- | Exports a function of type --@@ -416,8 +420,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportBS :: Name -> Q [Dec]-ngxExportBS = ngxExport 'BS 'Unambiguous- 'bS [t|BSImpl|]+ngxExportBS =+ ngxExport 'BS 'Unambiguous 'bS -- | Exports a function of type --@@ -427,8 +431,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportBSS :: Name -> Q [Dec]-ngxExportBSS = ngxExport 'BSS 'Unambiguous- 'bSS [t|BSSImpl|]+ngxExportBSS =+ ngxExport 'BSS 'Unambiguous 'bSS -- | Exports a function of type --@@ -438,8 +442,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportBLS :: Name -> Q [Dec]-ngxExportBLS = ngxExport 'BLS 'Unambiguous- 'bLS [t|BLSImpl|]+ngxExportBLS =+ ngxExport 'BLS 'Unambiguous 'bLS -- | Exports a function of type --@@ -449,8 +453,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportYY :: Name -> Q [Dec]-ngxExportYY = ngxExport 'YY 'YYSync- 'yY [t|YYImpl|]+ngxExportYY =+ ngxExport 'YY 'YYSync 'yY -- | Exports a function of type --@@ -460,8 +464,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportBY :: Name -> Q [Dec]-ngxExportBY = ngxExport 'BY 'Unambiguous- 'bY [t|BYImpl|]+ngxExportBY =+ ngxExport 'BY 'Unambiguous 'bY -- | Exports a function of type --@@ -471,8 +475,8 @@ -- -- for using in directive __/haskell_run/__. ngxExportIOYY :: Name -> Q [Dec]-ngxExportIOYY = ngxExportC 'IOYY 'IOYYSync- 'ioyY [t|YYImpl|]+ngxExportIOYY =+ ngxExportC 'IOYY 'IOYYSync 'ioyY -- | Exports a function of type --@@ -482,8 +486,8 @@ -- -- for using in directive __/haskell_run_async/__. ngxExportAsyncIOYY :: Name -> Q [Dec]-ngxExportAsyncIOYY = ngxExportC 'IOYY 'IOYYAsync- 'asyncIOYY [t|AsyncIOYYImpl|]+ngxExportAsyncIOYY =+ ngxExportC 'IOYY 'IOYYAsync 'asyncIOYY -- | Exports a function of type --@@ -496,8 +500,8 @@ -- The first argument of the exported function contains buffers of the client -- request body. ngxExportAsyncOnReqBody :: Name -> Q [Dec]-ngxExportAsyncOnReqBody = ngxExport 'IOYYY 'Unambiguous- 'asyncIOYYY [t|AsyncIOYYYImpl|]+ngxExportAsyncOnReqBody =+ ngxExport 'IOYYY 'Unambiguous 'asyncIOYYY -- | Exports a function of type --@@ -511,8 +515,8 @@ -- The boolean argument of the exported function marks that the service is -- being run for the first time. ngxExportServiceIOYY :: Name -> Q [Dec]-ngxExportServiceIOYY = ngxExport 'IOYY 'IOYYAsync- 'asyncIOYY [t|AsyncIOYYImpl|]+ngxExportServiceIOYY =+ ngxExport 'IOYY 'IOYYAsync 'asyncIOYY -- | Exports a function of type --@@ -523,8 +527,8 @@ -- for using in directives __/haskell_content/__ and -- __/haskell_static_content/__. ngxExportHandler :: Name -> Q [Dec]-ngxExportHandler = ngxExport 'Handler 'Unambiguous- 'handler [t|HandlerImpl|]+ngxExportHandler =+ ngxExport 'Handler 'Unambiguous 'handler -- | Exports a function of type --@@ -535,8 +539,8 @@ -- for using in directives __/haskell_content/__ and -- __/haskell_static_content/__. ngxExportDefHandler :: Name -> Q [Dec]-ngxExportDefHandler = ngxExport 'YY 'YYDefHandler- 'defHandler [t|DefHandlerImpl|]+ngxExportDefHandler =+ ngxExport 'YY 'YYDefHandler 'defHandler -- | Exports a function of type --@@ -546,8 +550,8 @@ -- -- for using in directive __/haskell_unsafe_content/__. ngxExportUnsafeHandler :: Name -> Q [Dec]-ngxExportUnsafeHandler = ngxExport 'UnsafeHandler 'Unambiguous- 'unsafeHandler [t|UnsafeHandlerImpl|]+ngxExportUnsafeHandler =+ ngxExport 'UnsafeHandler 'Unambiguous 'unsafeHandler -- | Exports a function of type --@@ -557,8 +561,8 @@ -- -- for using in directive __/haskell_async_content/__. ngxExportAsyncHandler :: Name -> Q [Dec]-ngxExportAsyncHandler = ngxExport 'AsyncHandler 'Unambiguous- 'asyncHandler [t|AsyncHandlerImpl|]+ngxExportAsyncHandler =+ ngxExport 'AsyncHandler 'Unambiguous 'asyncHandler -- | Exports a function of type --@@ -571,8 +575,8 @@ -- The first argument of the exported function contains buffers of the client -- request body. ngxExportAsyncHandlerOnReqBody :: Name -> Q [Dec]-ngxExportAsyncHandlerOnReqBody = ngxExport 'AsyncHandlerRB 'Unambiguous- 'asyncHandlerRB [t|AsyncHandlerRBImpl|]+ngxExportAsyncHandlerOnReqBody =+ ngxExport 'AsyncHandlerRB 'Unambiguous 'asyncHandlerRB -- | Exports a function of type --@@ -583,8 +587,8 @@ -- for using in directives __/haskell_service_hook/__ and -- __/haskell_service_update_hook/__. ngxExportServiceHook :: Name -> Q [Dec]-ngxExportServiceHook = ngxExportC 'IOYY 'IOYYSync- 'ioyYWithFree [t|YYImpl|]+ngxExportServiceHook =+ ngxExportC 'IOYY 'IOYYSync 'ioyYWithFree data ServiceHookInterrupt = ServiceHookInterrupt @@ -787,7 +791,7 @@ {-# INLINE safeAsyncYYHandler #-} fromHTTPHeaders :: HTTPHeaders -> L.ByteString-fromHTTPHeaders = L.fromChunks . foldr (\(z -> a, z -> b) -> ([a, b] ++)) []+fromHTTPHeaders = L.fromChunks . foldr (\(a, b) -> (z a :) . (z b :)) [] where z s | B.null s = B.singleton 0 | otherwise = s
ngx-export.cabal view
@@ -1,5 +1,5 @@ name: ngx-export-version: 1.7.8+version: 1.7.9 synopsis: Helper module for Nginx haskell module description: Helper module for <https://github.com/lyokha/nginx-haskell-module Nginx haskell module>.@@ -17,7 +17,7 @@ library default-language: Haskell2010- build-depends: base >= 4.9 && < 5+ build-depends: base >= 4.10 && < 5 , template-haskell >= 2.11.0.0 , bytestring >= 0.10.0.0 , monad-loops >= 0.4.2@@ -31,6 +31,4 @@ Paths_ngx_export ghc-options: -Wall- if impl(ghc < 8.2)- ghc-options: -Wno-incomplete-patterns