问题标签 [haskell-spock]

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 回答
374 浏览

haskell - 从 Spock 中的 POST 请求中捕获参数

在 Spock 的文档中,这里https://www.spock.li/2015/04/19/type-safe_routing.html,它只描述了如何从 get 请求中捕获参数。我需要从帖子中捕获。我怎样才能做到这一点?

0 投票
1 回答
249 浏览

json - 无法修复 Aeson 和 Spock 中的“模糊类型变量”

我有一个 Spock 应用程序,其中有:

它抛出一个异常:

因此我尝试像这样解决它:

但没有运气:

如何解决?

更新:

这不能解决问题:

0 投票
1 回答
107 浏览

haskell - 如何在 Spock 中创建“ActionCtxT”?

我想从 json 对象中提取一个值。我有这个:

和错误:

我知道这意味着什么:带有 myVal 的行必须返回 ActionCtxT 类型以及所有其他行。或纯值。因此,如何修复它?

0 投票
1 回答
499 浏览

haskell - 如何使用 Spock (Haskell) 提供静态内容?

我正在运行一个 Spock 服务器并希望提供一些静态内容。我正在使用respondMiddleware“Web.Spock.Action”包中的函数。

签名是:

我正在使用staticPolicy“Network.Wai.Middleware.Static”包中的功能获取这个“中间件”

addBase以及使用“Network.Wai.Middleware.Static”包中的“策略”

这是我的代码块:

static一个index.html和相关的 JS 和 CSS 文件,它被放置在 stack 项目的根目录中。我得到的错误是Failed to load resource: the server responded with a status of 400 (Bad Request)

0 投票
0 回答
76 浏览

haskell - 减少haskell中的类约束并检查持久表

我正在尝试设置一个基本端点,它接受一个 id 并通过一个连接表以使用持久性和 spock 返回所有连接的记录,一个工作实现看起来像这样。

问题 1:这些函数的类约束是否必须如此之大?似乎尝试编写这些 monad 会因为有这么多的限制而很快变得厌烦。我已经看到我可以使用 Constraint Kinds 来设置约束同义词,但我觉得可能我做错了什么需要这么多约束。

我还想看看是否可以编写一个更通用的方法来执行连接操作。据推测,具有输入类型和用于连接的表就足够了,编译器可以推断输出类型并且(至少在像 ruby​​ 这样的语言中)您可以检查连接表类型以找到正确的列加入。就像是:

但是,尝试实现这样的功能超出了我的范围。我不确定传递有关用于联接的表的信息的最佳方法是什么。我实现了一个显式传递列的版本(如下),它可以工作,但它再次具有巨大的类约束,并且采用比我想要的更大的方法签名。有没有办法实现上面的签名?

0 投票
1 回答
215 浏览

haskell - Haskell:如何测试使用 wreq 的 Spock 应用程序?

我使用Spockwreq在 Haskell 中编写了一个非常简单的应用程序。我想写一些测试,但我不知道该怎么做。

该应用程序所做的只是向另一台服务器发出 HTTP 请求,并将 JSON 响应转换为对人类友好的消息。如果有帮助,这里是代码。我想编写一个测试,在给定某个 JSON 响应的情况下断言人性化消息是正确的。

在 Ruby 中,我会模拟 HTTP 客户端,在这种情况下wreq,以控制我得到的 JSON 响应,但我不确定在 Haskell 中如何,甚至是否可以做到这一点。

根据我从研究中收集的信息,听起来类型类约束类型变量是要走的路,这对我来说就像依赖注入,但我不确定如何在 Spock 和wreq。

Spock 测试教程描述了如何在听起来很棒的水平上测试Spock IO Application。我不确定的部分是如何“注入”模拟 HTTP 客户端来控制 JSON 响应。

任何帮助表示赞赏!

0 投票
0 回答
77 浏览

haskell - 如何将 monad 转换器添加到 Spock 应用程序中?

按照教程,我有一个基本的 hello world Spock 应用程序,但现在我想以FooT某种方式将我自己的 monad 转换器添加到 Spock 转换器堆栈中。

我找到了这个答案,但它看起来spockT并没有真正用于最新版本的 spock。看起来现在有一个带有 a和 a的spock函数,但是我看不到任何带有参数的东西,我可以在其中指定我的 monad 转换器。是否仍然可以以某种方式将,或任何其他 monad 变压器插入 spock 变压器堆栈?我有什么误解?谢谢!SpockCfgSpockMmFooTStateT

0 投票
1 回答
182 浏览

html - 如何正确堆叠单子以最终呈现为 html?

我的目标是正确地提供带有HtmlT m类型(理想情况下)的 html 函数(如 Spock-core 中定义的那样Html ())。在这之间,我正在执行一些 Network.Http.Simple 请求。显然我对Haskell的了解不够,我没有找到强制正确单子的方法。据我所知(并理解 monad 的全部含义),没有办法组成不同的 monad,例如(Monad M, Monad N => M a -> (a -> N b) -> N b).

我设法实现的最好的方法是设置一个HtmlT IO ()类型,但后来我陷入了转换功能lucid :: HtmlT IO () -> SpockAction dtb sess state ()

这是我的连接函数(Auth是托管授权密钥和令牌的 FromJSON 数据结构)

接下来,这将连接到getRequest类型的函数中String -> HtmlT IO ()

在这里我们来到 lucid 函数,Lucid 可以处理转换Html () -> SpockAction ...Html ()无非HtmlT Identity ()如此,我的第一次尝试是用HtmlT IO ().

也许IO不是这里的好单子?当我尝试 Identity monad (拥有 a HtmlT Identity ())时,如果我将 connect 定义为,connect :: Identity Auth那么自然会要求我提供 Identity 的 FromJSON 实例(由使用 httpJSON 引起),一旦我进入 Identity monad,这可能是一个潜在的解决方案我能够将事情连接起来,并可能以一个干净的Html ()类型完成,然后我的 lucid 函数将顺利执行。

感谢您提供任何线索或提示,也许我的方法是完全错误的,我正在做的整个事情是查询一个 restAPI 网站并在使用 Spock 运行的 Web 服务器上查看结果。

0 投票
1 回答
31 浏览

haskell - 在 Spock Web 服务器上打印字节串

在 Spock 上运行的网络服务器(例如本地主机)上可视化字节字符串主体

我的目标:创建网站并查看字节串(转换为文本) 框架:Http Simple 用于为我的服务器执行对 restAPI Spock 的请求 我不想创建 JSON,因为我需要在创建之前操作/检查我的响应JSON 结构。一般的想法是我想使用响应正文来构造一个 JSON 查询结构(用户将能够编写他的问题),该结构将被发送到 restAPI 网站。

我设法建立一个这样的请求:

然后我用它来查询API页面

然后我跟着一个简短的 SpockM monad:

fct 等于

一切都编译得很好,我什至可以在 GHCI 中看到调用的结果,例如:(connect >>= (\ x -> print x)与 getRequest "GetProperties" 相同)我不明白的是 lucidIO 应该给我一个 ActionCtxtT ctx mb 类型,它完全适合 a处理程序(例如,像中的文本函数do get ... $ text -> ActionCtxT ctx m a)并且应该由 main() 中的 spock 函数处理,即runSpock 8080 (spock spockCfg app1) 我试图摆脱 ByteString 'ending' 类型,用 () 替换它,以便尽可能接近地模仿这Html ()在我研究的许多示例中出现并工作的类型。所有解析和请求构建都是使用 HTTP.Simple 完成的(我知道它不是很优雅,例如它必须工作),它把我从一个 monad 中拉出来(由于第一个函数 'parseRequest' -> m Request)来自在 lucidIO 之前我无法逃脱 - 可能是我选择了错误的 Monad(即 IO :但使用 IO 我能够检查 ghci 中的所有内容)。你能给我一些关于如何在我的浏览器中打印这个 ByteString 的提示吗?

0 投票
1 回答
221 浏览

haskell - 如何使用 Spock 和 Lucid 提供静态文件?

开始使用 Haskell、Spock 和 Lucid 进行 Web 开发,我不知道如何提供我的静态文件。在Main.hsI have的目录中/static/css/main.css,它只包含一个背景颜色,以查看是否确实应用了 css。所以我的目录树看起来像

但是,使用以下配置,main.css找不到该文件(使用 Firefox 检查时它包含 404)。除此之外,该网站显示良好。

在提供这些文件(使用 Wai)时,我尝试模仿funblog示例,将其更改为 Lucid 而不是 Blaze。特别是middleware $ staticPolicy (addBase "static")fromWeb/Blog.hs和我们链接 css from 的行Web/Views/Site.hs


编辑/添加将 Lucid 翻译为 Blaze 会得到相同的结果(翻译如下),所以我一定在其他地方遗漏了一些东西。