Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/meowgorithm/mr-env

A simple way to read environment variables in Haskell
https://github.com/meowgorithm/mr-env

environment-variables haskell

Last synced: 28 days ago
JSON representation

A simple way to read environment variables in Haskell

Awesome Lists containing this project

README

        

# Mr. Env

![build][action-badge] [![Hackage][hackage-shield]][hackage]

[action-badge]: https://github.com/meowgorithm/mr-env/workflows/build/badge.svg
[hackage]: http://hackage.haskell.org/package/mr-env
[hackage-shield]: https://img.shields.io/hackage/v/mr-env.svg?style=flat&color=blueviolet

A simple way to read environment variables in Haskell.

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

## Simple Example

Read environment variables with `do` notation:

```haskell
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:

```haskell
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][1]_ (as
opposed to _ap_). In that vein, `<$>` is _brackety-cash._

[1]: https://www.reddit.com/r/haskell/comments/241jcm/how_do_you_say/

## Authors

* [Christian Rocha](https://github.com/meowgorithm)
* [Sam Raker](https://github.com/swizzard)

## License

MIT