{-# LANGUAGE OverloadedStrings #-} module PMS.UI.Response.DS.Utility where import System.Log.FastLogger import qualified Control.Exception.Safe as E import Control.Monad.IO.Class import Control.Monad.Except import Control.Monad.Reader import qualified PMS.Domain.Model.DM.Type as DM import qualified PMS.Domain.Model.DS.Utility as DM import PMS.UI.Response.DM.Type -- | -- runApp :: DM.DomainData -> AppData -> TimedFastLogger -> AppContext a -> IO (Either DM.ErrorData a) runApp domDat appDat logger ctx = DM.runFastLoggerT domDat logger $ runExceptT $ flip runReaderT domDat $ runReaderT ctx appDat -- | -- liftIOE :: IO a -> AppContext a liftIOE f = liftIO (go f) >>= liftEither where go :: IO b -> IO (Either String b) go x = E.catchAny (Right <$> x) errHdl errHdl :: E.SomeException -> IO (Either String a) errHdl = return . Left . show