A simple way to read environment variables in Haskell.
-- Read environment variables, with defaults host <- envAsString "HOST" "localhost" port <- envAsInt "PORT" 8000
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" ++ "."
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.
MIT