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添加了一些關於這一點。 –