是否可以使用 Servant 返回不同的 http 代码?

KAc*_*ion 7 haskell servant

我想编写 API 端点,根据传入参数和外部世界的状态返回不同的 http 代码。在python中,它看起来像以下(wsgi):

def application(environ, start_response):
    if check_foo():
        start_response("200 OK", [])
        return b'42'
    else:
        start_response("201 Created", [])
        return b'43'
Run Code Online (Sandbox Code Playgroud)

如何使用Servant做到这一点并不陌生:

type UserAPI = Verb 'GET 201 '[JSON] Int :<|> Verb 'GET 200 '[JSON] Int

server :: Server UserAPI
server = pure 42 :<|> pure 43
Run Code Online (Sandbox Code Playgroud)

编译并运行,但只返回 42,http 代码 201。当然,我可以用ServerError偷偷摸摸任何我想要的东西,但是这样我就失去了仆人的所有优点,并且必须自己进行序列化。

或者,我可以将 200 和 201 之间的区别推到返回数据中,但保持 http 代码的信息量对我来说很重要。

那么,有没有办法让一个端点返回不同的两个不同的 http 代码,并将它们都视为“成功”?