Я хочу выполнить операцию удаления в Servant и вернуть ошибку или (). Вот мой код:
del :: Int -> ExceptT ServantErr IO ()
del myId = liftIO $ do
cn <- getConnection
a <- execute cn "delete from table1 where id = ?" [myId]
case a of
1 -> return ()
_ -> throwE err503 --compile error
Ошибка:
Couldn't match expected type ‘IO ()’
with actual type ‘ExceptT ServantErr m0 a0’
In the expression: throwE err503
In a case alternative: _ -> throwE err503
Я бы предпочел не использовать liftIO перед каждым выражением, если это возможно:
del myId = do
cn <- liftIO getConnection
a <- liftIO $ execute cn "delete from table1 where id = ?" [myId]
case a of
1 -> return ()
_ -> throwE err503
Как я могу вернуть ошибку тогда?