ngx-export-tools-1.2.2.1: Extra tools for Nginx haskell module
Copyright(c) Alexey Radkov 2023
LicenseBSD-style
Maintaineralexey.radkov@gmail.com
Stabilitystable
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

NgxExport.Tools.Combinators

Description

 
Synopsis

Combinators of effectful actions

A set of functions to combine effectful actions for building handlers and services tuned for special purposes.

Exported functions

voidHandler Source #

Arguments

:: IO a

Target computation

-> IO ByteString 

Runs an effectful computation and then returns an empty ByteString

This function saves printing the final return L.empty action in handlers that return unused or empty ByteString.

For example, service signalUpconf being used as an update callback in

type Upconf = [Text]

signalUpconf :: Upconf -> NgxExportService
signalUpconf upconf = const $ do
    mapConcurrently_ getUrl upconf
    return L.empty

ngxExportSimpleServiceTyped 'signalUpconf ''Upconf $
    PersistentService Nothing

returns an empty bytestring which is not used in a meaningful way, therefore it can be rewritten as

signalUpconf :: Upconf -> NgxExportService
signalUpconf = const . voidHandler . mapConcurrently_ getUrl

which helps to focus better on the computation itself.

Since: 1.2.0

voidHandler' Source #

Arguments

:: IO a

Target computation

-> b

Ignored value

-> IO ByteString 

Runs an effectful computation and then returns an empty ByteString

The same as voidHandler except it accepts an additional value which is ignored. Implemented as

voidHandler' = const . voidHandler

This can be useful in declarations of services that accept a boolean flag which marks whether the service is running for the first time. This flag is often ignored though, in which case using voidHandler' can simplify code.

For instance, service signalUpconf from the example for voidHandler can be further simplified as

signalUpconf :: Upconf -> NgxExportService
signalUpconf = voidHandler' . mapConcurrently_ getUrl

Since: 1.2.1

Split services