salak-0.3: Configuration Loader

Copyright(c) 2019 Daniel YU
LicenseBSD3
Maintainerleptonyu@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Salak

Contents

Description

Configuration Loader for Production in Haskell.

Synopsis

How to use this library

| This library define a universal procedure to load configurations and parse properties, also supports reload configuration files.

We can load configurations from command line, environment, configuration files such as yaml or toml etc, and we may want to have our own strategies to load configurations from multi sources and overwrite properties by orders of these sources.

PropConfig defines a common loading strategy:

1. loadCommandLine
2. loadEnvironment
3. loadConfFiles
4. load file from folder `salak.conf.dir` if defined
5. load file from current folder if enabled
6. load file from home folder if enabled
7. file extension matching, support yaml or toml or any other loader.

Load earlier has higher priority, priorities cannot be changed.

Usage:

Environment:

export TEST_CONFIG_NAME=daniel

Current Directory: salak.yaml

test.config:
  name: noop
  dir: ls

Current Directory: salak.toml

[test.config]
ext=2
data Config = Config
  { name :: Text
  , dir  :: Maybe Text
  , ext  :: Int
  } deriving (Eq, Show)

instance MonadCatch m => FromProp m Config where
  fromProp = Config
    <$> "user" ? pattern "[a-z]{5,16}"
    <*> "pwd"
    <*> "ext" .?= 1

main = runSalakWith "salak" (YAML :|: TOML) $ do
  c :: Config <- require "test.config"
  lift $ print c

GHCi play

λ> :set -XFlexibleInstances -XMultiParamTypeClasses
λ> import Salak
λ> import Data.Default
λ> import Data.Text(Text)
λ> data Config = Config { name :: Text, dir  :: Maybe Text, ext  :: Int} deriving (Eq, Show)
λ> instance MonadCatch m => FromProp m Config where fromProp = Config <$> "user" <*> "dir" <*> "ext" .?= 1
λ> runSalak def (require "") :: IO Config
Config {name = "daniel", dir = Nothing, ext = 1}

Salak Main Functions

runSalak :: (MonadCatch m, MonadIO m) => PropConfig -> RunSalakT m a -> m a Source #

Run salak, load strategy refer to loadSalak

runSalakWith :: (MonadCatch m, MonadIO m, HasLoad file) => FileName -> file -> RunSalakT m a -> m a Source #

Run salak, load strategy refer to loadSalakWith

loadAndRunSalak :: (MonadThrow m, MonadIO m) => LoadSalakT m () -> RunSalakT m a -> m a Source #

Standard salak functions, by load and run with RunSalakT.

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 HasSalak.

data PropConfig Source #

Prop load configuration

Constructors

PropConfig 

Fields

Instances
Default PropConfig Source # 
Instance details

Defined in Salak

Methods

def :: PropConfig #

Run Functions

class HasSalak m where Source #

Core type class of salak, which provide function to parse properties.

Methods

require :: 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"
Instances
(MonadThrow m, MonadSalak m) => HasSalak m Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

require :: FromProp m a => Text -> m a Source #

class Monad m => MonadSalak m where Source #

Monad has the ability to get a SourcePack instance.

Instances
(m' ~ t (RunSalakT m), MonadTrans t, Monad m, Monad m') => MonadSalak m' Source # 
Instance details

Defined in Salak.Internal

Monad m => MonadSalak (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Monad m => MonadSalak (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

MonadIO m => MonadSalak (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

data RunSalakT m a Source #

Standard HasSalak instance.

Instances
MonadTrans RunSalakT Source # 
Instance details

Defined in Salak.Internal

Methods

lift :: Monad m => m a -> RunSalakT m a #

Monad m => MonadReader SourcePack (RunSalakT m) Source # 
Instance details

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 # 
Instance details

Defined in Salak.Internal

Methods

(>>=) :: RunSalakT m a -> (a -> RunSalakT m b) -> RunSalakT m b #

(>>) :: RunSalakT m a -> RunSalakT m b -> RunSalakT m b #

return :: a -> RunSalakT m a #

fail :: String -> RunSalakT m a #

Functor m => Functor (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

fmap :: (a -> b) -> RunSalakT m a -> RunSalakT m b #

(<$) :: a -> RunSalakT m b -> RunSalakT m a #

Applicative m => Applicative (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

pure :: a -> RunSalakT m a #

(<*>) :: RunSalakT m (a -> b) -> RunSalakT m a -> RunSalakT m b #

liftA2 :: (a -> b -> c) -> RunSalakT m a -> RunSalakT m b -> RunSalakT m c #

(*>) :: RunSalakT m a -> RunSalakT m b -> RunSalakT m b #

(<*) :: RunSalakT m a -> RunSalakT m b -> RunSalakT m a #

MonadIO m => MonadIO (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

liftIO :: IO a -> RunSalakT m a #

MonadThrow m => MonadThrow (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

throwM :: Exception e => e -> RunSalakT m a #

MonadCatch m => MonadCatch (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

catch :: Exception e => RunSalakT m a -> (e -> RunSalakT m a) -> RunSalakT m a #

MonadUnliftIO m => MonadUnliftIO (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

askUnliftIO :: RunSalakT m (UnliftIO (RunSalakT m)) #

withRunInIO :: ((forall a. RunSalakT m a -> IO a) -> IO b) -> RunSalakT m b #

Monad m => MonadSalak (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

type RunSalak = RunSalakT IO Source #

Simple IO Monad

Load Functions

Monad for Loader

data LoadSalakT m a Source #

Configuration Loader Monad, used for load properties from sources. Custom loaders using loadTrie

Instances
MonadTrans LoadSalakT Source # 
Instance details

Defined in Salak.Internal

Methods

lift :: Monad m => m a -> LoadSalakT m a #

Monad m => Monad (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

(>>=) :: LoadSalakT m a -> (a -> LoadSalakT m b) -> LoadSalakT m b #

(>>) :: LoadSalakT m a -> LoadSalakT m b -> LoadSalakT m b #

return :: a -> LoadSalakT m a #

fail :: String -> LoadSalakT m a #

Functor m => Functor (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

fmap :: (a -> b) -> LoadSalakT m a -> LoadSalakT m b #

(<$) :: a -> LoadSalakT m b -> LoadSalakT m a #

Monad m => Applicative (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

pure :: a -> LoadSalakT m a #

(<*>) :: LoadSalakT m (a -> b) -> LoadSalakT m a -> LoadSalakT m b #

liftA2 :: (a -> b -> c) -> LoadSalakT m a -> LoadSalakT m b -> LoadSalakT m c #

(*>) :: LoadSalakT m a -> LoadSalakT m b -> LoadSalakT m b #

(<*) :: LoadSalakT m a -> LoadSalakT m b -> LoadSalakT m a #

MonadIO m => MonadIO (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

liftIO :: IO a -> LoadSalakT m a #

MonadThrow m => MonadThrow (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

throwM :: Exception e => e -> LoadSalakT m a #

MonadCatch m => MonadCatch (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

catch :: Exception e => LoadSalakT m a -> (e -> LoadSalakT m a) -> LoadSalakT m a #

MonadUnliftIO m => MonadUnliftIO (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

askUnliftIO :: LoadSalakT m (UnliftIO (LoadSalakT m)) #

withRunInIO :: ((forall a. LoadSalakT m a -> IO a) -> IO b) -> LoadSalakT m b #

MonadIO m => MonadSalak (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

type LoadSalak = LoadSalakT IO Source #

Simple IO Monad

Basic loaders

loadCommandLine :: MonadIO m => ParseCommandLine -> LoadSalakT m () Source #

Default way to parse command line arguments

type ParseCommandLine = [String] -> IO [(Text, Text)] Source #

Convert arguments to properties

defaultParseCommandLine :: ParseCommandLine Source #

Default way to parse command line arguments

loadEnv :: MonadIO m => LoadSalakT m () Source #

Load environment variables into Source

loadMock :: MonadIO m => [(Text, Text)] -> LoadSalakT m () Source #

Load mock variables into Source

loadSalak :: (MonadCatch m, MonadIO m) => PropConfig -> LoadSalakT m () Source #

Default load salak. All these configuration sources has orders, from highest priority to lowest priority:

1. loadCommandLine
2. loadEnvironment
3. loadConfFiles
4. load file from folder `salak.conf.dir` if defined
5. load file from current folder if enabled
6. load file from home folder if enabled
7. file extension matching, support yaml or toml or any other loader.

loadSalakWith :: (MonadCatch m, MonadIO m, HasLoad file) => file -> FileName -> LoadSalakT m () Source #

File Loaders

type ExtLoad = (String, FilePath -> LoadSalak ()) Source #

Load file by extension

loadByExt :: HasLoad a => a -> FilePath -> LoadSalak () Source #

Load files with specified format, yaml or toml, etc.

class HasLoad a where Source #

Methods

loaders :: a -> [ExtLoad] Source #

Instances
(HasLoad a, HasLoad b) => HasLoad (a :|: b) Source # 
Instance details

Defined in Salak

Methods

loaders :: (a :|: b) -> [ExtLoad] Source #

data a :|: b infixr 3 Source #

Constructors

a :|: b infixr 3 
Instances
(HasLoad a, HasLoad b) => HasLoad (a :|: b) Source # 
Instance details

Defined in Salak

Methods

loaders :: (a :|: b) -> [ExtLoad] Source #

Reload Functions

data ReloadResult Source #

Reload result, show erros or changes.

Constructors

ReloadResult 

Fields

  • hasError :: Bool

    If reload process has errors.

  • msgs :: [String]

    If hasError then this show error messages, else this show change logs.

Instances
Show ReloadResult Source # 
Instance details

Defined in Salak.Internal.Source

askReload :: MonadSalak m => m (IO ReloadResult) Source #

Get reload action which used for reload profiles

Properties Parsers

class PropOp f a where Source #

Prop operators.

Suppose we have following definition:

data Config = Config
  { enabled :: Bool
  , level   :: IO LogLevel
  }

Minimal complete definition

(.?=)

Methods

(.?=) :: f a -> a -> f a infixl 5 Source #

Parse or default value

instance MonadThrow m => FromProp m Config where
  fromProp = Config
    <$> "enabled" .?= True
    <*> "level"   .?= (return LevelInfo)

IO value will work right.

(.?:) :: Default b => f a -> (b -> a) -> f a infixl 5 Source #

Parse or auto extract from a Default value

instance Default Config where
  def = Config True (return LevelInfo)
instance MonadThrow m => FromProp m Config where
  fromProp = Config
    <$> "enabled" .?: enabled
    <$> "level"   .?: level
Instances
Alternative f => PropOp f a Source #

Support normal value

Instance details

Defined in Salak.Internal.Prop

Methods

(.?=) :: f a -> a -> f a Source #

(.?:) :: Default b => f a -> (b -> a) -> f a Source #

(Show a, MonadCatch m, MonadIO m, FromProp (Either SomeException) a) => PropOp (Prop m) (IO a) Source #

Support IO value

Instance details

Defined in Salak.Internal.Prop

Methods

(.?=) :: Prop m (IO a) -> IO a -> Prop m (IO a) Source #

(.?:) :: Default b => Prop m (IO a) -> (b -> IO a) -> Prop m (IO a) Source #

class Monad m => FromProp m a where Source #

Minimal complete definition

Nothing

Methods

fromProp :: Prop m a Source #

fromProp :: (Generic a, GFromProp m (Rep a)) => Prop m a Source #

Instances
MonadThrow m => FromProp m CDouble Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CFloat Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CULLong Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CLLong Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CULong Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CLong Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m CLong Source #

MonadThrow m => FromProp m CUInt Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m CUInt Source #

MonadThrow m => FromProp m CInt Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m CInt Source #

MonadThrow m => FromProp m CUShort Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CShort Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m CBool Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m CBool Source #

MonadThrow m => FromProp m DiffTime Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m NominalDiffTime Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Word64 Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Word32 Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Word16 Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Word8 Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Word8 Source #

MonadThrow m => FromProp m Word Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Word Source #

MonadThrow m => FromProp m Int64 Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Int64 Source #

MonadThrow m => FromProp m Int32 Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Int32 Source #

MonadThrow m => FromProp m Int16 Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Int16 Source #

MonadThrow m => FromProp m Int8 Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Int8 Source #

MonadThrow m => FromProp m Int Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Int Source #

MonadThrow m => FromProp m Integer Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Double Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Float Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Float Source #

MonadThrow m => FromProp m Scientific Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m String Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m ByteString Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m ByteString Source # 
Instance details

Defined in Salak.Internal.Prop

MonadThrow m => FromProp m Text Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Text Source #

MonadThrow m => FromProp m Text Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Text Source #

MonadThrow m => FromProp m Bool Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m Bool Source #

(HasResolution a, MonadThrow m) => FromProp m (Fixed a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Fixed a) Source #

(MonadCatch m, FromProp m a) => FromProp m (Option a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Option a) Source #

(Monad m, FromProp m a) => FromProp m (Product a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Product a) Source #

(Monad m, FromProp m a) => FromProp m (Sum a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Sum a) Source #

(Monad m, FromProp m a) => FromProp m (Dual a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Dual a) Source #

(Monad m, FromProp m a) => FromProp m (Last a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Last a) Source #

(Monad m, FromProp m a) => FromProp m (First a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (First a) Source #

(Monad m, FromProp m a) => FromProp m (Max a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Max a) Source #

(Monad m, FromProp m a) => FromProp m (Min a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Min a) Source #

(Monad m, FromProp m a) => FromProp m (Identity a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Identity a) Source #

(Show a, MonadThrow m, MonadIO m, FromProp (Either SomeException) a) => FromProp m (IO a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (IO a) Source #

FromProp m a => FromProp m [a] Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m [a] Source #

(MonadCatch m, FromProp m a) => FromProp m (Maybe a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Maybe a) Source #

(Monad m, FromProp m a, FromProp m b) => FromProp m (a, b) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b) Source #

(MonadCatch m, FromProp m a) => FromProp m (Either String a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (Either String a) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c) => FromProp m (a, b, c) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d) => FromProp m (a, b, c, d) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d, FromProp m e) => FromProp m (a, b, c, d, e) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d, e) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d, FromProp m e, FromProp m f) => FromProp m (a, b, c, d, e, f) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d, e, f) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d, FromProp m e, FromProp m f, FromProp m g) => FromProp m (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d, e, f, g) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d, FromProp m e, FromProp m f, FromProp m g, FromProp m h) => FromProp m (a, b, c, d, e, f, g, h) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d, e, f, g, h) Source #

(Monad m, FromProp m a, FromProp m b, FromProp m c, FromProp m d, FromProp m e, FromProp m f, FromProp m g, FromProp m h, FromProp m i) => FromProp m (a, b, c, d, e, f, g, h, i) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromProp :: Prop m (a, b, c, d, e, f, g, h, i) Source #

data Prop m a Source #

Instances
MonadTrans Prop Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

lift :: Monad m => m a -> Prop m a #

Monad m => MonadReader SourcePack (Prop m) Source # 
Instance details

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 => Monad (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

(>>=) :: Prop m a -> (a -> Prop m b) -> Prop m b #

(>>) :: Prop m a -> Prop m b -> Prop m b #

return :: a -> Prop m a #

fail :: String -> Prop m a #

Functor m => Functor (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fmap :: (a -> b) -> Prop m a -> Prop m b #

(<$) :: a -> Prop m b -> Prop m a #

Applicative m => Applicative (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

pure :: a -> Prop m a #

(<*>) :: Prop m (a -> b) -> Prop m a -> Prop m b #

liftA2 :: (a -> b -> c) -> Prop m a -> Prop m b -> Prop m c #

(*>) :: Prop m a -> Prop m b -> Prop m b #

(<*) :: Prop m a -> Prop m b -> Prop m a #

MonadCatch m => Alternative (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

empty :: Prop m a #

(<|>) :: Prop m a -> Prop m a -> Prop m a #

some :: Prop m a -> Prop m [a] #

many :: Prop m a -> Prop m [a] #

MonadIO m => MonadIO (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

liftIO :: IO a -> Prop m a #

MonadThrow m => MonadThrow (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

throwM :: Exception e => e -> Prop m a #

MonadCatch m => MonadCatch (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

catch :: Exception e => Prop m a -> (e -> Prop m a) -> Prop m a #

MonadThrow m => HasValid (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

invalid :: HasI18n a => a -> Prop m b #

mark :: String -> Prop m a -> Prop m a #

Monad m => MonadSalak (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

(Show a, MonadCatch m, MonadIO m, FromProp (Either SomeException) a) => PropOp (Prop m) (IO a) Source #

Support IO value

Instance details

Defined in Salak.Internal.Prop

Methods

(.?=) :: Prop m (IO a) -> IO a -> Prop m (IO a) Source #

(.?:) :: Default b => Prop m (IO a) -> (b -> IO a) -> Prop m (IO a) Source #

(MonadThrow m, FromProp m a) => IsString (Prop m a) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

fromString :: String -> Prop m a #

readPrimitive :: MonadThrow m => (Value -> Either String a) -> Prop m a Source #

Parse primitive value from Value

readEnum :: MonadThrow m => (Text -> Either String a) -> Prop m a Source #

Parse enum value from Text

data SourcePack Source #

Instances
Monad m => MonadReader SourcePack (Prop m) Source # 
Instance details

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 # 
Instance details

Defined in Salak.Internal

Methods

ask :: RunSalakT m SourcePack #

local :: (SourcePack -> SourcePack) -> RunSalakT m a -> RunSalakT m a #

reader :: (SourcePack -> a) -> RunSalakT m a #

Reexport

class MonadThrow m => MonadCatch (m :: Type -> Type) #

A class for monads which allow exceptions to be caught, in particular exceptions which were thrown by throwM.

Instances should obey the following law:

catch (throwM e) f = f e

Note that the ability to catch an exception does not guarantee that we can deal with all possible exit points from a computation. Some monads, such as continuation-based stacks, allow for more than just a success/failure strategy, and therefore catch cannot be used by those monads to properly implement a function such as finally. For more information, see MonadMask.

Minimal complete definition

catch

Instances
MonadCatch IO 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => IO a -> (e -> IO a) -> IO a #

MonadCatch STM 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => STM a -> (e -> STM a) -> STM a #

e ~ SomeException => MonadCatch (Either e)

Since: exceptions-0.8.3

Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e0 => Either e a -> (e0 -> Either e a) -> Either e a #

MonadCatch m => MonadCatch (MaybeT m)

Catches exceptions from the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => MaybeT m a -> (e -> MaybeT m a) -> MaybeT m a #

MonadCatch m => MonadCatch (ListT m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => ListT m a -> (e -> ListT m a) -> ListT m a #

MonadCatch m => MonadCatch (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

catch :: Exception e => Prop m a -> (e -> Prop m a) -> Prop m a #

MonadCatch m => MonadCatch (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

catch :: Exception e => RunSalakT m a -> (e -> RunSalakT m a) -> RunSalakT m a #

MonadCatch m => MonadCatch (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

catch :: Exception e => LoadSalakT m a -> (e -> LoadSalakT m a) -> LoadSalakT m a #

MonadCatch m => MonadCatch (ExceptT e m)

Catches exceptions from the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e0 => ExceptT e m a -> (e0 -> ExceptT e m a) -> ExceptT e m a #

MonadCatch m => MonadCatch (IdentityT m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => IdentityT m a -> (e -> IdentityT m a) -> IdentityT m a #

(Error e, MonadCatch m) => MonadCatch (ErrorT e m)

Catches exceptions from the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e0 => ErrorT e m a -> (e0 -> ErrorT e m a) -> ErrorT e m a #

MonadCatch m => MonadCatch (ReaderT r m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => ReaderT r m a -> (e -> ReaderT r m a) -> ReaderT r m a #

MonadCatch m => MonadCatch (StateT s m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => StateT s m a -> (e -> StateT s m a) -> StateT s m a #

MonadCatch m => MonadCatch (StateT s m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => StateT s m a -> (e -> StateT s m a) -> StateT s m a #

(MonadCatch m, Monoid w) => MonadCatch (WriterT w m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a #

(MonadCatch m, Monoid w) => MonadCatch (WriterT w m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a #

(MonadCatch m, Monoid w) => MonadCatch (RWST r w s m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a #

(MonadCatch m, Monoid w) => MonadCatch (RWST r w s m) 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a #

class Monad m => MonadThrow (m :: Type -> Type) #

A class for monads in which exceptions may be thrown.

Instances should obey the following law:

throwM e >> x = throwM e

In other words, throwing an exception short-circuits the rest of the monadic computation.

Minimal complete definition

throwM

Instances
MonadThrow [] 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> [a] #

MonadThrow Maybe 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> Maybe a #

MonadThrow IO 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> IO a #

MonadThrow Q 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> Q a #

MonadThrow STM 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> STM a #

e ~ SomeException => MonadThrow (Either e) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e0 => e0 -> Either e a #

MonadThrow m => MonadThrow (MaybeT m)

Throws exceptions into the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> MaybeT m a #

MonadThrow m => MonadThrow (ListT m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> ListT m a #

MonadThrow m => MonadThrow (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

throwM :: Exception e => e -> Prop m a #

MonadThrow m => MonadThrow (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

throwM :: Exception e => e -> RunSalakT m a #

MonadThrow m => MonadThrow (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

throwM :: Exception e => e -> LoadSalakT m a #

MonadThrow m => MonadThrow (ExceptT e m)

Throws exceptions into the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e0 => e0 -> ExceptT e m a #

MonadThrow m => MonadThrow (IdentityT m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> IdentityT m a #

(Error e, MonadThrow m) => MonadThrow (ErrorT e m)

Throws exceptions into the base monad.

Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e0 => e0 -> ErrorT e m a #

MonadThrow m => MonadThrow (ReaderT r m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> ReaderT r m a #

MonadThrow m => MonadThrow (StateT s m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> StateT s m a #

MonadThrow m => MonadThrow (StateT s m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> StateT s m a #

(MonadThrow m, Monoid w) => MonadThrow (WriterT w m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> WriterT w m a #

(MonadThrow m, Monoid w) => MonadThrow (WriterT w m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> WriterT w m a #

MonadThrow m => MonadThrow (ContT r m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> ContT r m a #

(MonadThrow m, Monoid w) => MonadThrow (RWST r w s m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> RWST r w s m a #

(MonadThrow m, Monoid w) => MonadThrow (RWST r w s m) 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> RWST r w s 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

liftIO

Instances
MonadIO IO

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.IO.Class

Methods

liftIO :: IO a -> IO a #

MonadIO Q 
Instance details

Defined in Language.Haskell.TH.Syntax

Methods

liftIO :: IO a -> Q a #

MonadIO m => MonadIO (MaybeT m) 
Instance details

Defined in Control.Monad.Trans.Maybe

Methods

liftIO :: IO a -> MaybeT m a #

MonadIO m => MonadIO (ListT m) 
Instance details

Defined in Control.Monad.Trans.List

Methods

liftIO :: IO a -> ListT m a #

MonadIO m => MonadIO (Prop m) Source # 
Instance details

Defined in Salak.Internal.Prop

Methods

liftIO :: IO a -> Prop m a #

MonadIO m => MonadIO (RunSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

liftIO :: IO a -> RunSalakT m a #

MonadIO m => MonadIO (LoadSalakT m) Source # 
Instance details

Defined in Salak.Internal

Methods

liftIO :: IO a -> LoadSalakT m a #

MonadIO m => MonadIO (ExceptT e m) 
Instance details

Defined in Control.Monad.Trans.Except

Methods

liftIO :: IO a -> ExceptT e m a #

MonadIO m => MonadIO (IdentityT m) 
Instance details

Defined in Control.Monad.Trans.Identity

Methods

liftIO :: IO a -> IdentityT m a #

(Error e, MonadIO m) => MonadIO (ErrorT e m) 
Instance details

Defined in Control.Monad.Trans.Error

Methods

liftIO :: IO a -> ErrorT e m a #

MonadIO m => MonadIO (ReaderT r m) 
Instance details

Defined in Control.Monad.Trans.Reader

Methods

liftIO :: IO a -> ReaderT r m a #

MonadIO m => MonadIO (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Lazy

Methods

liftIO :: IO a -> StateT s m a #

MonadIO m => MonadIO (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

liftIO :: IO a -> StateT s m a #

(Monoid w, MonadIO m) => MonadIO (WriterT w m) 
Instance details

Defined in Control.Monad.Trans.Writer.Lazy

Methods

liftIO :: IO a -> WriterT w m a #

(Monoid w, MonadIO m) => MonadIO (WriterT w m) 
Instance details

Defined in Control.Monad.Trans.Writer.Strict

Methods

liftIO :: IO a -> WriterT w m a #

MonadIO m => MonadIO (ContT r m) 
Instance details

Defined in Control.Monad.Trans.Cont

Methods

liftIO :: IO a -> ContT r m a #

(Monoid w, MonadIO m) => MonadIO (RWST r w s m) 
Instance details

Defined in Control.Monad.Trans.RWS.Lazy

Methods

liftIO :: IO a -> RWST r w s m a #

(Monoid w, MonadIO m) => MonadIO (RWST r w s m) 
Instance details

Defined in Control.Monad.Trans.RWS.Strict

Methods

liftIO :: IO a -> RWST r w s m a #