问题标签 [servant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
559 浏览

haskell - 如何将 log-warper 与 Servant 一起使用?

我有一个基于 Servant 构建的应用程序,现在我想向应用程序添加日志记录。我浏览了 Haskell 日志包,我假设这个提供了我需要的东西:https ://github.com/serokell/log-warper/blob/master/log-warper/examples/HowTo.md

经常用于使用 Servant 构建应用程序的“设计模式”之一是使用 Reader monad,所以我对应用程序使用这种方法:我有包含 AppConfig 的 AppEnv。通常,我可以向 AppEnv 添加类似“记录器”实体的内容,然后在处理程序中使用它。虽然,log-warper 不提供“记录器”,但它使用了不同的方法(我认为这似乎是另一个 monad;请参阅上面链接中的示例)。所以我不知道如何将这个记录器与仆人一起使用。

这是我的基于仆人的应用程序(使用最新版本的仆人,基于文档中的示例:http: //haskell-servant.readthedocs.io/en/stable/tutorial/Server.html#welcome-hoistserver):

这是主要功能:

现在,我如何将 log-warper 添加到应用程序中,以便我可以初始化记录器(我假设使用 launchFromFile),然后在应用程序中使用日志记录(logInfo、logError 等)(特别是在处理程序中,但可能在其他功能)?

谢谢

0 投票
1 回答
158 浏览

haskell - 如何配置servant-multipart 以允许更长的文件名?

我有一些servant-multipart端点,它是用类似的东西定义的MultipartForm Mem (MultipartData Mem)。但是,此端点不允许我上传长名称文件,因为defaultParseRequestBodyOptions.

不知何故,我想Mem用一些Mem'与 相关的替换noLimitParseRequestBodyOptions,但我无法弄清楚如何做到这一点。如何使用具有此选项的servant-multipart端点Network.Wai.Parse

表单中的Multipart类型由 参数化,在模块tag中有两个实现的值,和。现在,是一个具有关联类型的实例。我猜我必须在这里修改一些东西来调整相关的.Servant.MultipartTmpMemMemMultipartBackendMultipartBackendOptionsParseRequestBodyOptions

0 投票
1 回答
108 浏览

haskell - 如何为一组处理程序提供从 Db 中获取的值的服务?

我正在使用具有 JWT 身份验证的仆人。我正在尝试获取经过身份验证的用户并将其传递给处理程序,而不必在每个处理程序中重复相同的逻辑。

使用单个参数函数,它就像一个魅力:

另一方面,当我尝试对带有两个参数的函数执行相同操作时:

它抛出编译错误:

从数据库中获取用户的函数:

为什么第一个示例有效而另一个无效?如何在servant中正确解决这种情况?

0 投票
1 回答
205 浏览

haskell - 使用带有 ReaderT(池连接)IO 的 Servant.Generic 路由

我正在使用servant-generic-0.1.0.3servant-server-0.13.0.1执行以下操作:

效果很好,然后我尝试使用它ReaderT来避免传递Pool ConnectionsiteServer,所以我添加AppM和替换siteServer如下:

但是当我尝试编译它时遇到了一堆错误。

我遵循了servant cookbook中显示的相同步骤,但我无法使用通用路由进行此操作,尽管它在使用常规路由时有效。

我是否错过了可以使这项工作发挥作用的东西?

0 投票
1 回答
97 浏览

haskell - 使用 GADT 的类似仆人的实现

我正在阅读优秀的为什么仆人是类型级 DSL?. 我已经到了到目前为止提出的实现问题的部分,即 an 中的捕获数量Endpoint可能会有所不同,并且没有办法在没有依赖类型的情况下实现整个链接生成函数。

Endpoint定义是:

示例定义是:

非全链接功能为:

我对以下内容很感兴趣:

幸运的是,GADT 可以在这里提供帮助。我们可以Endpoint变成一个跟踪捕获的 GADT,然后使用一些类型级别的计算从我们的捕获列表中获取链接生成函数的类型,并通过将通过捕获的类型类实例定义链接生成函数并为它们中的每一个添加一个论点……对于非常稳定的域,基于 GADT 的方法可以很好地工作(除了更平易近人之外),并且由于我们所要求的灵活性而在此不予考虑。

我有兴趣尝试使用 GADT 方法,但是我可以提供一些关于如何创建 GADT 的提示,该 GADT 将“跟踪捕获,然后使用一些类型级计算从我们的列表中获取链接生成函数的类型捕获"

谁能给我一些关于如何开始使用 GADT 版本的提示。谢谢。

0 投票
1 回答
90 浏览

haskell - 如何解析此 GHC 类型检查错误消息?

我被这个 GHC(8.4.3 版)类型检查错误难住了。这是我正在研究的 Haskell Servant 代码库的摘录。如果有人可以解释此消息的原因,我将不胜感激。为代码的长度道歉,但我无法进一步减少它。

当我在 GHC 中加载此文件时,我收到以下错误。

0 投票
0 回答
117 浏览

api - 使用 CSV API 的仆人

我找到了这个演练: https ://www.youtube.com/watch?v=TQB2JbxNEUI

并想试一试。但是我发现我的 API 返回的是 CSV 数据,而不是 JSON。这段代码的替代实现是什么?

我要使用的 API 来自 Alpha Vantage,用以下方式表示:

我尝试过在线搜索,但看起来我对 Haskell 生态系统的了解太少了。抱歉-仍在努力学习:)。所以我也很高兴听到有用的 Haskell 知识来源。

0 投票
1 回答
522 浏览

haskell - Haskell Servant 和 MTL 应用风格

在我观看了 George Wilson 的精彩演讲后(Next Level MTL https://github.com/gwils/next-level-mtl-with-classy-optics/blob/master/Slides.pdf)我尝试创建使用 MTL 的应用程序风格设计并决定使用仆人,看起来这个库不适合这种设计。
下面的代码无法编译,因为我无法将m转换为 Handler。

你可以在这里找到完整的例子:https ://github.com/paweln1986/ServantMTLStackOverflowExample

是否可以将任何单子与仆人一起使用?如何做到这一点?我尝试使用提升服务器但没有成功。你知道我在这里想念什么吗?

编译错误:

更短的例子:

这给了我下面的编译错误

0 投票
1 回答
263 浏览

haskell - 仆人:查看所有请求头

我从文档中知道我可以执行以下操作来捕获特定的标头:

但我正在探索一些没有很好记录的 webhook,我只想检查请求中的所有标头。

0 投票
1 回答
229 浏览

haskell - Haskell 仆人:多部分上传的 Swagger 描述

我正在使用servant-swagger 来定义一个REST 服务并从中生成一个Swagger 文件。它使用文件上传组合器的扩展版本来为端点定义客户端以添加文件。我想在上传 API 中添加 Swagger 描述。如果我可以添加一个参数,我会很高兴

招摇。知道怎么做吗?我在尝试

但这不会在 Swagger 文件中生成描述(尽管它可以编译)。