| Copyright | 2019 Daniel YU |
|---|---|
| License | BSD3 |
| Maintainer | leptonyu@gmail.com |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Salak.Internal
Contents
Description
This module is used for implementing loaders.
Synopsis
- loadAndRunSalak' :: (MonadThrow m, MonadIO m) => LoadSalakT m () -> (SourcePack -> m a) -> m a
- loadTrie :: (MonadThrow m, MonadIO m) => Bool -> String -> (Int -> IO TraceSource) -> LoadSalakT m ()
- loadList :: (MonadThrow m, MonadIO m, Foldable f, ToKeys k, ToValue v) => Bool -> String -> IO (f (k, v)) -> LoadSalakT m ()
- data LoadSalakT m a
- type LoadSalak = LoadSalakT IO
- data RunSalakT m a
- type RunSalak = RunSalakT IO
- runRun :: Monad m => RunSalakT m a -> SourcePack -> m a
- class Monad m => MonadSalak m where
- loadMock :: (MonadThrow m, MonadIO m) => [(Text, Text)] -> LoadSalakT m ()
- loadEnv :: (MonadThrow m, MonadIO m) => LoadSalakT m ()
- loadCommandLine :: (MonadThrow m, MonadIO m) => ParseCommandLine -> LoadSalakT m ()
- type ParseCommandLine = [String] -> IO [(Text, Text)]
- defaultParseCommandLine :: ParseCommandLine
- tryLoadFile :: MonadIO m => (FilePath -> LoadSalakT m ()) -> FilePath -> LoadSalakT m ()
- type Source = Trie Vals
- type TraceSource = Trie ([String], Vals)
- newtype Keys = Keys {}
- data Key
- simpleKeys :: Text -> [Key]
- class ToKeys a where
- setVal :: ToValue v => Int -> v -> TraceSource -> TraceSource
- data Val v = Val !Int !v
- data Value
- class ToValue a where
- liftNT :: MonadIO m => LoadSalak () -> LoadSalakT m ()
- data SourcePack = SourcePack {}
- class Monad m => MonadIO (m :: Type -> Type)
- data Writable a
- toWritable :: IO a -> IO (Writable a)
- getWritable :: Writable a -> IO a
- setWritable :: Maybe a -> Writable a -> IO ()
Documentation
loadAndRunSalak' :: (MonadThrow m, MonadIO m) => LoadSalakT m () -> (SourcePack -> m a) -> m a Source #
Standard salak functions, by load and with a SourcePack instance.
Users should use SourcePack to create custom MonadSalak instances, then you get will an instance of MonadSalak.
loadTrie :: (MonadThrow m, MonadIO m) => Bool -> String -> (Int -> IO TraceSource) -> LoadSalakT m () Source #
Basic loader
loadList :: (MonadThrow m, MonadIO m, Foldable f, ToKeys k, ToValue v) => Bool -> String -> IO (f (k, v)) -> LoadSalakT m () Source #
Simple loader
data LoadSalakT m a Source #
Configuration Loader Monad, used for load properties from sources. Custom loaders using loadTrie
Instances
type LoadSalak = LoadSalakT IO Source #
Simple IO Monad
Standard MonadSalak instance.
Instances
| MonadTrans RunSalakT Source # | |
Defined in Salak.Internal | |
| Monad m => MonadReader SourcePack (RunSalakT m) Source # | |
Defined in Salak.Internal Methods ask :: RunSalakT m SourcePack # local :: (SourcePack -> SourcePack) -> RunSalakT m a -> RunSalakT m a # reader :: (SourcePack -> a) -> RunSalakT m a # | |
| Monad m => Monad (RunSalakT m) Source # | |
| Functor m => Functor (RunSalakT m) Source # | |
| Applicative m => Applicative (RunSalakT m) Source # | |
Defined in Salak.Internal | |
| MonadIO m => MonadIO (RunSalakT m) Source # | |
Defined in Salak.Internal | |
| MonadThrow m => MonadThrow (RunSalakT m) Source # | |
Defined in Salak.Internal | |
| MonadCatch m => MonadCatch (RunSalakT m) Source # | |
| (MonadThrow m, MonadUnliftIO m) => MonadUnliftIO (RunSalakT m) Source # | |
Defined in Salak.Internal | |
| Monad m => MonadSalak (RunSalakT m) Source # | |
Defined in Salak.Internal | |
class Monad m => MonadSalak m where Source #
Core type class of salak, which provide function to parse properties.
Minimal complete definition
Methods
askSalak :: m SourcePack Source #
Monad has the ability to get a SourcePack instance.
askReload :: m (IO ReloadResult) Source #
Get reload action which used for reload profiles
setLogF :: MonadIO m => (String -> IO ()) -> m () Source #
logSalak :: MonadIO m => String -> m () Source #
require :: (MonadThrow m, FromProp m a) => Text -> m a Source #
Parse properties using FromProp. For example:
a :: Bool <- require "bool.key" b :: Maybe Int <- require "int.optional.key" c :: Either String Int <- require "int.error.key" d :: IO Int <- require "int.reloadable.key"
require supports parse IO values, which actually wrap a MVar variable and can be reseted by reloading configurations.
Normal value will not be affected by reloading configurations.
Instances
| (m ~ t m', Monad m', Monad m, MonadTrans t, MonadSalak m') => MonadSalak m Source # | |
| Monad m => MonadSalak (Prop m) Source # | |
| Monad m => MonadSalak (RunSalakT m) Source # | |
Defined in Salak.Internal | |
| MonadIO m => MonadSalak (LoadSalakT m) Source # | |
Defined in Salak.Internal Methods askSalak :: LoadSalakT m SourcePack Source # askReload :: LoadSalakT m (IO ReloadResult) Source # setLogF :: (String -> IO ()) -> LoadSalakT m () Source # logSalak :: String -> LoadSalakT m () Source # require :: (MonadThrow (LoadSalakT m), FromProp (LoadSalakT m) a) => Text -> LoadSalakT m a Source # | |
loadMock :: (MonadThrow m, MonadIO m) => [(Text, Text)] -> LoadSalakT m () Source #
Load mock variables into Source
loadEnv :: (MonadThrow m, MonadIO m) => LoadSalakT m () Source #
Load environment variables into Source
loadCommandLine :: (MonadThrow m, MonadIO m) => ParseCommandLine -> LoadSalakT m () Source #
Default way to parse command line arguments
defaultParseCommandLine :: ParseCommandLine Source #
Default way to parse command line arguments
tryLoadFile :: MonadIO m => (FilePath -> LoadSalakT m ()) -> FilePath -> LoadSalakT m () Source #
Try load file, if file does not exist then do nothing.
type TraceSource = Trie ([String], Vals) Source #
simpleKeys :: Text -> [Key] Source #
setVal :: ToValue v => Int -> v -> TraceSource -> TraceSource Source #
Constructors
| VT !Text | |
| VI !Scientific | |
| VB !Bool | |
| VLT !LocalTime | |
| VD !Day | |
| VH !TimeOfDay | |
| VZT !TimeZone !LocalTime | |
| VU !UTCTime |
class ToValue a where Source #
Instances
| ToValue Bool Source # | |
| ToValue Double Source # | |
| ToValue Int Source # | |
| ToValue Int64 Source # | |
| ToValue Integer Source # | |
| ToValue ByteString Source # | |
Defined in Salak.Internal.Val Methods toVal :: ByteString -> Value Source # | |
| ToValue Text Source # | |
| ToValue String Source # | |
| ToValue Scientific Source # | |
Defined in Salak.Internal.Val Methods toVal :: Scientific -> Value Source # | |
| ToValue UTCTime Source # | |
| ToValue Value Source # | |
data SourcePack Source #
Constructors
| SourcePack | |
Instances
| Monad m => MonadReader SourcePack (Prop m) Source # | |
Defined in Salak.Internal.Prop Methods ask :: Prop m SourcePack # local :: (SourcePack -> SourcePack) -> Prop m a -> Prop m a # reader :: (SourcePack -> a) -> Prop m a # | |
| Monad m => MonadReader SourcePack (RunSalakT m) Source # | |
Defined in Salak.Internal Methods ask :: RunSalakT m SourcePack # local :: (SourcePack -> SourcePack) -> RunSalakT m a -> RunSalakT m a # reader :: (SourcePack -> a) -> RunSalakT m a # | |
class Monad m => MonadIO (m :: Type -> Type) #
Monads in which IO computations may be embedded.
Any monad built by applying a sequence of monad transformers to the
IO monad will be an instance of this class.
Instances should satisfy the following laws, which state that liftIO
is a transformer of monads:
Minimal complete definition
Instances
Writable Value
Writable data structure. Writable is designed for working with IO value pased by salak.
It provide a way to override IO value provided by salak, can be used in the application which need to change
values of some configurations by overriding it directly. For example, logger function can use a log level property
to control which level of logs should be printed. By using Writeable value, we can change the property
directly.
getWritable :: Writable a -> IO a Source #
Get value.