@hackage mr-env0.1.0.5

A simple way to read environment variables in Haskell

  • Installation

  • Dependencies (1)

  • Dependents (0)

Mr. Env

build Hackage

A simple way to read environment variables in Haskell.

-- Read environment variables, with defaults
host <- envAsString "HOST" "localhost"
port <- envAsInt "PORT" 8000

Simple Example

Read environment variables with do notation:

import System.Environment.MrEnv ( envAsBool, envAsInt, envAsInteger, envAsString )

main :: IO ()
main = do

    -- Get a string, with a fallback value if nothing is set.
    host <- envAsString "HOST" "localhost"

    -- Get an int. If you need an integer instead you could also use envAsInteger.
    port <- envAsInt "PORT" 8000

    -- Get a boolean. Here we're expecting the environment variable to read
    -- something along the lines of "true", "TRUE", "True", "truE" and so on.
    debug <- envAsBool "DEBUG" False

    putStrLn $
        "Let's connect to "
        ++ host
        ++ " on port "
        ++ show port
        ++ ". Debug mode is "
        ++ if debug then "on" else "off"
        ++ "."

Fancy Example

Read environment variables into a record:

import System.Environment.MrEnv ( envAsBool, envAsInt, envAsInteger, envAsString )

data Config =
    Config { host  :: String
           , port  :: Int
           , debug :: Bool
           }

getConfig :: IO Config
getConfig = Config
    <$> envAsString "HOST" "localhost"
    <*> envAsInt "PORT" 8000
    <*> envAsBool "DEBUG" False

main :: IO ()
main =
    getConfig >>= \conf ->
        putStrLn $
            "Let's connect to "
            ++ host conf
            ++ " on port "
            ++ show $ port conf
            ++ ". Debug mode is "
            ++ if debug conf then "on" else "off"
            ++ "."

We suggest pronouncing <*> brackety-splat (as opposed to ap). In that vein, <$> is brackety-cash.

Authors

License

MIT