J'utilise Control.Monad.Except et je suis coincé dans un endroit où je dois forcer l'exécution d'une action ExceptT AppError m a
pour obtenir une action IO
, puis l'envelopper de retour Si vous vous demandez pourquoi cela est nécessaire, c'est parce que la fonction de la bibliothèque sous-jacente que je dois exécuter n'accepte que l'action E/S Database.PostgreSQL.Simple.withTransaction :: Connection -> IO a -> IO a
Comment convertir un « IO (soit ea) dans un ExceptT ema
Comment écrire le conceptuel équivalent du suivant:
type AppM = ExceptT AppError (ReaderT Env (LoggingT IO))
runAppM :: Env -> AppM a -> a
withTransaction :: AppM a -> AppM a
withTransaction appm = do
conn <- getDbConnection
env <- getEnv
liftIO $ PGS.withTransaction conn $ runAppM appm
Voici l'erreur que je reçois:
Excepted type: ExceptT AppError (ReadertT Env (LoggingT IO)) a
Actual type: ExceptT AppError (ReadertT Env (LoggingT IO)) (Either AppError a)
Le titre et le corps de votre question sont des questions complètement différentes. –