-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Loads environment variables from dotenv files
--   
--   In most applications, <a>configuration should be separated from
--   code</a>. While it usually works well to keep configuration in the
--   environment, there are cases where you may want to store configuration
--   in a file outside of version control.
--   
--   <a>Dotenv</a> files have become popular for storing configuration,
--   especially in development and test environments. In <a>Ruby</a>,
--   <a>Python</a> and <a>Javascript</a> there are libraries to facilitate
--   loading of configuration options from configuration files. This
--   library loads configuration to environment variables for programs
--   written in Haskell.
--   
--   To use, call <a>loadFile</a> from your application:
--   
--   <pre>
--   import Configuration.Dotenv
--   loadFile False "/my/dotenvfile"
--   </pre>
--   
--   This package also includes an executable that can be used to inspect
--   the results of applying one or more Dotenv files to the environment,
--   or for invoking your executables with an environment after one or more
--   Dotenv files is applied.
--   
--   See the <a>Github</a> page for more information on this package.
@package dotenv
@version 0.5.2.5

module Configuration.Dotenv.ParsedVariable
data ParsedVariable
ParsedVariable :: VarName -> VarValue -> ParsedVariable
type VarName = String
data VarValue
Unquoted :: VarContents -> VarValue
SingleQuoted :: VarContents -> VarValue
DoubleQuoted :: VarContents -> VarValue
type VarContents = [VarFragment]
data VarFragment
VarInterpolation :: String -> VarFragment
VarLiteral :: String -> VarFragment
CommandInterpolation :: String -> VarFragment
interpolateParsedVariables :: [ParsedVariable] -> IO [(String, String)]
instance GHC.Classes.Eq Configuration.Dotenv.ParsedVariable.ParsedVariable
instance GHC.Show.Show Configuration.Dotenv.ParsedVariable.ParsedVariable
instance GHC.Classes.Eq Configuration.Dotenv.ParsedVariable.VarValue
instance GHC.Show.Show Configuration.Dotenv.ParsedVariable.VarValue
instance GHC.Classes.Eq Configuration.Dotenv.ParsedVariable.VarFragment
instance GHC.Show.Show Configuration.Dotenv.ParsedVariable.VarFragment


-- | Parser for files in dotenv format. These files generally consist of
--   lines with the form key=value. Comments and blank lines are also
--   supported. More information on the dotenv format can be found in the
--   project README and the test suite.
module Configuration.Dotenv.Parse

-- | Returns a parser for a Dotenv configuration file. Accepts key and
--   value arguments separated by <tt>=</tt>. Comments in all positions are
--   handled appropriately.
configParser :: Parser [ParsedVariable]

module Configuration.Dotenv.Scheme.Types
data EnvType
EnvInteger :: EnvType
EnvBool :: EnvType
EnvText :: EnvType
data Env
Env :: String -> EnvType -> Bool -> Env
[envName] :: Env -> String
[envType] :: Env -> EnvType
[required] :: Env -> Bool
instance GHC.Classes.Ord Configuration.Dotenv.Scheme.Types.Env
instance GHC.Classes.Eq Configuration.Dotenv.Scheme.Types.Env
instance GHC.Show.Show Configuration.Dotenv.Scheme.Types.Env
instance GHC.Classes.Ord Configuration.Dotenv.Scheme.Types.EnvType
instance GHC.Classes.Eq Configuration.Dotenv.Scheme.Types.EnvType
instance GHC.Show.Show Configuration.Dotenv.Scheme.Types.EnvType
instance Data.Aeson.Types.FromJSON.FromJSON Configuration.Dotenv.Scheme.Types.Env
instance Data.Aeson.Types.FromJSON.FromJSON Configuration.Dotenv.Scheme.Types.EnvType

module Configuration.Dotenv.Scheme.Parser
parseEnvsWithScheme :: [(String, EnvType)] -> Either [ParseError Char Void] ()
parseEnvAs :: String -> EnvType -> Either (ParseError Char Void) ()
showType :: EnvType -> String

module Configuration.Dotenv.Scheme.Helpers
joinEnvs :: [Env] -> [(String, String)] -> [(Env, (String, String))]
matchValueAndType :: [(Env, (String, String))] -> [(String, EnvType)]
missingDotenvs :: [Env] -> [(Env, (String, String))] -> [Env]
missingSchemeEnvs :: [(String, String)] -> [(Env, (String, String))] -> [(String, String)]
sepWithCommas :: [String] -> String
showMissingDotenvs :: [Env] -> String
showMissingSchemeEnvs :: [(String, String)] -> String


-- | Provides the types with extra options for loading a dotenv file.
module Configuration.Dotenv.Types

-- | Configuration Data Types with extra options for executing dotenv.
data Config
Config :: [FilePath] -> [FilePath] -> Bool -> Config

-- | The paths for the .env files
[configPath] :: Config -> [FilePath]

-- | The paths for the .env.example files
[configExamplePath] :: Config -> [FilePath]

-- | Flag to allow override env variables
[configOverride] :: Config -> Bool

-- | Default configuration. Use .env file without .env.example strict envs
--   and without overriding.
defaultConfig :: Config
instance GHC.Show.Show Configuration.Dotenv.Types.Config
instance GHC.Classes.Eq Configuration.Dotenv.Types.Config


-- | This module contains common functions to load and read dotenv files.
module Configuration.Dotenv

-- | Loads the given list of options into the environment. Optionally
--   override existing variables with values from Dotenv files.
load :: MonadIO m => Bool -> [(String, String)] -> m ()

-- | <tt>loadFile</tt> parses the environment variables defined in the
--   dotenv example file and checks if they are defined in the dotenv file
--   or in the environment. It also allows to override the environment
--   variables defined in the environment with the values defined in the
--   dotenv file.
loadFile :: MonadIO m => Config -> m [(String, String)]

-- | Parses the given dotenv file and returns values <i>without</i> adding
--   them to the environment.
parseFile :: MonadIO m => FilePath -> m [(String, String)]

-- | The helper allows to avoid exceptions in the case of missing files and
--   perform some action instead.
onMissingFile :: MonadCatch m => m a -> m a -> m a


-- | Provides a Data.Text interface for retrieving variables in a dotenv
--   file.
module Configuration.Dotenv.Text

-- | Parses the given dotenv file and returns values <i>without</i> adding
--   them to the environment.
parseFile :: MonadIO m => FilePath -> m [(Text, Text)]

module Configuration.Dotenv.Scheme
checkConfig :: [(String, String)] -> [Env] -> IO ()
checkScheme :: [Env] -> [Env]

-- | <tt>loadSafeFile</tt> parses the <i>.scheme.yml</i> file and will
--   perform the type checking of the environment variables in the
--   <i>.env</i> file.
loadSafeFile :: MonadIO m => FilePath -> Config -> m [(String, String)]
runSchemaChecker :: FilePath -> Config -> IO ()
