2
当我查询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
,但仍允许我不处理的任何异常通过?
如果我只想抓住他们,如果他们是这四种类型之一呢? –
@SeanClarkHess添加了一些关于这一点。 –