read-env-var 0.1.0.0 → 0.1.0.1
raw patch · 2 files changed
+37/−8 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ System.ReadEnvVar: lookupEnvDef :: IsString a => String -> a -> IO a
Files
- read-env-var.cabal +1/−1
- src/System/ReadEnvVar.hs +36/−7
read-env-var.cabal view
@@ -1,5 +1,5 @@ name: read-env-var-version: 0.1.0.0+version: 0.1.0.1 synopsis: Functions for safely reading environment variables. description: Please see README.md homepage: https://github.com/cdepillabout/read-env-var#readme
src/System/ReadEnvVar.hs view
@@ -14,6 +14,7 @@ module System.ReadEnvVar ( readEnvVar , readEnvVarDef+ , lookupEnvDef ) where #if __GLASGOW_HASKELL__ < 710@@ -23,6 +24,7 @@ #endif import Data.Maybe (fromMaybe)+import Data.String (IsString(fromString)) import System.Environment (lookupEnv) import Text.Read (readMaybe) @@ -30,12 +32,20 @@ -- 'readMaybe'. If the environment variable doesn't exist, or it can't be -- 'read', use the default value. --+-- Note that this does not read string values as one would expect.+-- -- >>> import System.Environment (setEnv)--- >>> setEnv "TEST_ENV_VAR" "1000"--- >>> readEnvVarDef "TEST_ENV_VAR" 5 :: IO Int+-- >>> setEnv "TEST_ENV_VAR1" "1000"+-- >>> readEnvVarDef "TEST_ENV_VAR1" 5 :: IO Int -- 1000 -- >>> readEnvVarDef "THIS_ENV_VAR_WILL_NOT_EXIST" 5 :: IO Int -- 5+-- >>> setEnv "TEST_ENV_VAR2" "some string 1"+-- >>> readEnvVarDef "TEST_ENV_VAR2" "def val" :: IO String+-- "def val"+-- >>> setEnv "TEST_ENV_VAR3" "\"some string 1\""+-- >>> readEnvVarDef "TEST_ENV_VAR3" "def val" :: IO String+-- "some string 1" readEnvVarDef :: Read a => String -- ^ environment variable to lookup -> a -- ^ default value to use if the environment variable@@ -46,17 +56,36 @@ -- | Lookup a value from an environment variable and read it in with -- 'readMaybe'. --+-- Note that this does not read string values as one would expect.+-- -- >>> import System.Environment (setEnv) -- >>> setEnv "TEST_ENV_VAR" "2000" -- >>> readEnvVar "TEST_ENV_VAR" :: IO (Maybe Int) -- Just 2000 -- >>> readEnvVar "THIS_ENV_VAR_WILL_NOT_EXIST" :: IO (Maybe Int) -- Nothing+-- >>> setEnv "TEST_ENV_VAR2" "some string 1"+-- >>> readEnvVar "TEST_ENV_VAR2" :: IO (Maybe String)+-- Nothing+-- >>> setEnv "TEST_ENV_VAR3" "\"some string 1\""+-- >>> readEnvVar "TEST_ENV_VAR3" :: IO (Maybe String)+-- Just "some string 1" readEnvVar :: Read a => String -- ^ environment variable to lookup -> IO (Maybe a)-readEnvVar envVar = do- maybeEnvVal <- lookupEnv envVar- case maybeEnvVal of- Nothing -> return Nothing- Just envVal -> return $ readMaybe envVal+readEnvVar = fmap (>>= readMaybe) . lookupEnv++-- | Like 'lookupEnv' but take a default value.+--+-- >>> import System.Environment (setEnv)+-- >>> setEnv "TEST_ENV_VAR" "foo"+-- >>> lookupEnvDef "TEST_ENV_VAR" "bar" :: IO String+-- "foo"+-- >>> lookupEnvDef "THIS_ENV_VAR_WILL_NOT_EXIST" "bar" :: IO String+-- "bar"+lookupEnvDef :: IsString a+ => String -- ^ environment variable to lookup+ -> a -- ^ default value to use if environment variable not defined+ -> IO a+lookupEnvDef envVar defaultValue =+ pure . maybe defaultValue fromString =<< lookupEnv envVar