lambdabot-core-5.3.1.2: Lambdabot core functionality

Safe Haskell | None
Language | Haskell98

Lambdabot.Config

Description

Extensible configuration system for lambdabot

TODO: there's notthing lambdabot-specific about this, it could be a useful standalone library.

Synopsis

- data Config t
- getConfigDefault :: Config t -> t
- mergeConfig :: Config t -> t -> t -> t
- class Monad m => MonadConfig (m :: Type -> Type) where
  - getConfig :: Config a -> m a
- config :: String -> TypeQ -> ExpQ -> Q [Dec]
- configWithMerge :: ExpQ -> String -> TypeQ -> ExpQ -> Q [Dec]

# Documentation

data Config t Source #

#### Instances

Instances details

GCompare Config Source # |
Instance details Defined in Lambdabot.Config Methods gcompare :: Config a -> Config b -> GOrdering a b #
GEq Config Source # |
Instance details Defined in Lambdabot.Config Methods geq :: Config a -> Config b -> Maybe (a :~: b) #

getConfigDefault :: Config t -> t Source #

mergeConfig :: Config t -> t -> t -> t Source #

class Monad m => MonadConfig (m :: Type -> Type) where Source #

Methods

getConfig :: Config a -> m a Source #

#### Instances

Instances details

MonadConfig LB Source # |
Instance details Defined in Lambdabot.Monad Methods getConfig :: Config a -> LB a Source #
MonadConfig m => MonadConfig (Cmd m) Source # |
Instance details Defined in Lambdabot.Command Methods getConfig :: Config a -> Cmd m a Source #
MonadConfig m => MonadConfig (ModuleT st m) Source # |
Instance details Defined in Lambdabot.Module Methods getConfig :: Config a -> ModuleT st m a Source #
MonadConfig m => MonadConfig (ReaderT r m) Source # |
Instance details Defined in Lambdabot.Config Methods getConfig :: Config a -> ReaderT r m a Source #
MonadConfig m => MonadConfig (StateT s m) Source # |
Instance details Defined in Lambdabot.Config Methods getConfig :: Config a -> StateT s m a Source #
(MonadConfig m, Monoid w) => MonadConfig (WriterT w m) Source # |
Instance details Defined in Lambdabot.Config Methods getConfig :: Config a -> WriterT w m a Source #

config :: String -> TypeQ -> ExpQ -> Q [Dec] Source #

Define a new configuration key with the specified name, type and default value

You should probably also provide an explicit export list for any module that defines config keys, because the definition introduces a few extra types that will clutter up the export list otherwise.

configWithMerge :: ExpQ -> String -> TypeQ -> ExpQ -> Q [Dec] Source #

Like `config`, but also allowing you to specify a "merge rule" that will be used to combine multiple bindings of the same key.

For example, in Lambdabot.Config.Core, `onStartupCmds` is defined as a list of commands to execute on startup. Its default value is ["offlinerc"], so if a user invokes the default lambdabot executable without arguments, they will get a REPL. Each instance of "-e" on the command-line adds a binding of the form:

    onStartupCmds :=> [command]

So if they give one "-e", it replaces the default (note that it is _not_ merged with the default - the default is discarded), and if they give more than one they are merged using the specified operation (in this case, `(++)`).