asap-0.0.1: lib/Web/JWT/ASAP/Env.hs
{-# LANGUAGE MultiParamTypeClasses #-}
module Web.JWT.ASAP.Env (
MonadEnv (..)
, asapLookupEnv
) where
import Control.Lens (( # ))
import Control.Monad.Except (ExceptT, MonadError (..))
import Control.Monad.Trans (lift)
import System.Environment (lookupEnv)
import Web.JWT.ASAP.Error
class MonadEnv m where
lookupEnv' :: String -> m (Maybe String)
instance MonadEnv IO where
lookupEnv' =
lookupEnv
instance (Monad m, MonadEnv m) => MonadEnv (ExceptT e m) where
lookupEnv' =
lift . lookupEnv'
asapLookupEnv :: (MonadError e m, HasAsapError e, MonadEnv m) => String -> m String
asapLookupEnv s =
maybe (throwError (asapMissingEnv # s)) pure =<< lookupEnv' s