Safe Haskell | None |
---|---|
Language | Haskell2010 |
Looper
Synopsis
- data LooperDef m = LooperDef {}
- seconds :: Double -> NominalDiffTime
- minutes :: Double -> NominalDiffTime
- hours :: Double -> NominalDiffTime
- data LooperFlags = LooperFlags {}
- getLooperFlags :: String -> Parser LooperFlags
- data LooperEnvironment = LooperEnvironment {}
- getLooperEnvironment :: String -> String -> IO LooperEnvironment
- readLooperEnvironment :: String -> String -> [(String, String)] -> LooperEnvironment
- data LooperConfiguration = LooperConfiguration {}
- data LooperSettings = LooperSettings {}
- deriveLooperSettings :: NominalDiffTime -> NominalDiffTime -> LooperFlags -> LooperEnvironment -> Maybe LooperConfiguration -> LooperSettings
- mkLooperDef :: Text -> LooperSettings -> m () -> LooperDef m
- runLoopers :: MonadUnliftIO m => [LooperDef m] -> m ()
- runLoopersIgnoreOverrun :: MonadUnliftIO m => (LooperDef m -> m ()) -> [LooperDef m] -> m ()
- runLoopersRaw :: MonadUnliftIO m => m () -> (LooperDef m -> m ()) -> [LooperDef m] -> m ()
- waitNominalDiffTime :: MonadIO m => NominalDiffTime -> m ()
Documentation
A looper definition
Constructors
LooperDef | |
Fields
|
Instances
Generic (LooperDef m) Source # | |
type Rep (LooperDef m) Source # | |
Defined in Looper type Rep (LooperDef m) = D1 (MetaData "LooperDef" "Looper" "looper-0.0.0.2-BjOKUISjKlOE4oO2B9h0mR" False) (C1 (MetaCons "LooperDef" PrefixI True) ((S1 (MetaSel (Just "looperDefName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text) :*: S1 (MetaSel (Just "looperDefEnabled") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Bool)) :*: (S1 (MetaSel (Just "looperDefPeriod") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 NominalDiffTime) :*: (S1 (MetaSel (Just "looperDefPhase") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 NominalDiffTime) :*: S1 (MetaSel (Just "looperDefFunc") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (m ())))))) |
seconds :: Double -> NominalDiffTime Source #
Construct a NominalDiffTime
from a number of seconds
minutes :: Double -> NominalDiffTime Source #
Construct a NominalDiffTime
from a number of minutes
hours :: Double -> NominalDiffTime Source #
Construct a NominalDiffTime
from a number of hours
data LooperFlags Source #
A structure to parse command-line flags for a looper into
Constructors
LooperFlags | |
Fields |
Instances
Eq LooperFlags Source # | |
Defined in Looper | |
Show LooperFlags Source # | |
Defined in Looper Methods showsPrec :: Int -> LooperFlags -> ShowS # show :: LooperFlags -> String # showList :: [LooperFlags] -> ShowS # | |
Generic LooperFlags Source # | |
type Rep LooperFlags Source # | |
Defined in Looper type Rep LooperFlags = D1 (MetaData "LooperFlags" "Looper" "looper-0.0.0.2-BjOKUISjKlOE4oO2B9h0mR" False) (C1 (MetaCons "LooperFlags" PrefixI True) (S1 (MetaSel (Just "looperFlagEnabled") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Bool)) :*: (S1 (MetaSel (Just "looperFlagPhase") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Int)) :*: S1 (MetaSel (Just "looperFlagPeriod") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Int))))) |
Arguments
:: String | The name of the looper (best to make this all-lowercase) |
-> Parser LooperFlags |
An optparse applicative parser for LooperFlags
data LooperEnvironment Source #
A structure to parse environment variables for a looper into
Constructors
LooperEnvironment | |
Fields |
Instances
Arguments
:: String | Prefix for each variable (best to make this all-caps) |
-> String | Name of the looper (best to make this all-caps too) |
-> IO LooperEnvironment |
Get a LooperEnvironment
from the environment
readLooperEnvironment Source #
Arguments
:: String | Prefix for each variable (best to make this all-caps) |
-> String | Name of the looper (best to make this all-caps too) |
-> [(String, String)] | |
-> LooperEnvironment |
Get a LooperEnvironment
from a pure environment
data LooperConfiguration Source #
A structure to configuration for a looper into
Constructors
LooperConfiguration | |
Fields |
Instances
data LooperSettings Source #
Settings that you might want to pass into a looper using mkLooperDef
Constructors
LooperSettings | |
Fields |
Instances
Arguments
:: NominalDiffTime | Default phase |
-> NominalDiffTime | Default period |
-> LooperFlags | |
-> LooperEnvironment | |
-> Maybe LooperConfiguration | |
-> LooperSettings |
Arguments
:: Text | Name |
-> LooperSettings | |
-> m () | The function to loop |
-> LooperDef m |
runLoopers :: MonadUnliftIO m => [LooperDef m] -> m () Source #
Simply run loopers
runLoopers = runLoopersIgnoreOverrun looperDefFunc
Note that this function will loop forever, you need to wrap it using async
yourself.
runLoopersIgnoreOverrun Source #
Arguments
:: MonadUnliftIO m | |
=> (LooperDef m -> m ()) | Custom runner |
-> [LooperDef m] | Loopers |
-> m () |
Run loopers with a custom runner, ignoring any overruns
runLoopersIgnoreOverrun = runLoopersRaw (pure ())
see runLoopersRaw
Note that this function will loop forever, you need to wrap it using async
yourself.
Arguments
:: MonadUnliftIO m | |
=> m () | Overrun handler |
-> (LooperDef m -> m ()) | Runner |
-> [LooperDef m] | Loopers |
-> m () |
Run loopers, with a custom runner and overrun handler
- The overrun handler is run when the looper function takes longer than its period. You can use this to log a warning, for example.
- The runner function is used to run the looper function
You can use
looperDefFunc
:: LooperDef m -> m ()
to run aLooperDef
, and you can wrap this function in some custom logic before you pass it intorunLoopersRaw
In this manner you can add logging or metrics, for example.
Note that this function will loop forever, you need to wrap it using async
yourself.
waitNominalDiffTime :: MonadIO m => NominalDiffTime -> m () Source #
Wait for a given NominalDiffTime
This takes care of the conversion to microseconds to pass to threadDelay
for you.
waitNominalDiffTime ndt = liftIO $ threadDelay $ round (toRational ndt * (1000 * 1000))