【发布时间】:2015-10-13 16:45:20
【问题描述】:
当我查询my database 时,它可能会抛出one of four different kinds of exceptions。
FormatError
QueryError
ResultError
SqlError
我想编写一个函数来捕获query 生成的这4 个异常中的任何一个并将它们提升到ExceptT。
runQuery :: (ToRow q, FromRow r) => Query -> q -> ExceptT ServantErr IO [r]
runQuery conn q sub = do
res <- liftIO $ try $ Postgres.query conn q sub
case res of
Left err -> throwError (postgresErr err)
Right r -> return r
postgresErr :: ??? -> ServantErr
postgresErr e = err500 { errBody = ByteString.pack (show e) }
这不起作用。 try 没有捕捉到任何东西。如何捕获 4 种异常类型中的任何一种,并根据类型将其映射到 ServantErr,但仍允许我无法处理的任何异常通过?
【问题讨论】:
标签: postgresql haskell exception