问题标签 [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.
haskell - 从 Spock 中的 POST 请求中捕获参数
在 Spock 的文档中,这里https://www.spock.li/2015/04/19/type-safe_routing.html,它只描述了如何从 get 请求中捕获参数。我需要从帖子中捕获。我怎样才能做到这一点?
json - 无法修复 Aeson 和 Spock 中的“模糊类型变量”
我有一个 Spock 应用程序,其中有:
它抛出一个异常:
因此我尝试像这样解决它:
但没有运气:
如何解决?
更新:
这不能解决问题:
haskell - 如何在 Spock 中创建“ActionCtxT”?
我想从 json 对象中提取一个值。我有这个:
和错误:
我知道这意味着什么:带有 myVal 的行必须返回 ActionCtxT 类型以及所有其他行。或纯值。因此,如何修复它?
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)
haskell - 减少haskell中的类约束并检查持久表
我正在尝试设置一个基本端点,它接受一个 id 并通过一个连接表以使用持久性和 spock 返回所有连接的记录,一个工作实现看起来像这样。
问题 1:这些函数的类约束是否必须如此之大?似乎尝试编写这些 monad 会因为有这么多的限制而很快变得厌烦。我已经看到我可以使用 Constraint Kinds 来设置约束同义词,但我觉得可能我做错了什么需要这么多约束。
我还想看看是否可以编写一个更通用的方法来执行连接操作。据推测,具有输入类型和用于连接的表就足够了,编译器可以推断输出类型并且(至少在像 ruby 这样的语言中)您可以检查连接表类型以找到正确的列加入。就像是:
但是,尝试实现这样的功能超出了我的范围。我不确定传递有关用于联接的表的信息的最佳方法是什么。我实现了一个显式传递列的版本(如下),它可以工作,但它再次具有巨大的类约束,并且采用比我想要的更大的方法签名。有没有办法实现上面的签名?
haskell - Haskell:如何测试使用 wreq 的 Spock 应用程序?
我使用Spock和wreq在 Haskell 中编写了一个非常简单的应用程序。我想写一些测试,但我不知道该怎么做。
该应用程序所做的只是向另一台服务器发出 HTTP 请求,并将 JSON 响应转换为对人类友好的消息。如果有帮助,这里是代码。我想编写一个测试,在给定某个 JSON 响应的情况下断言人性化消息是正确的。
在 Ruby 中,我会模拟 HTTP 客户端,在这种情况下wreq
,以控制我得到的 JSON 响应,但我不确定在 Haskell 中如何,甚至是否可以做到这一点。
根据我从研究中收集的信息,听起来类型类约束类型变量是要走的路,这对我来说就像依赖注入,但我不确定如何在 Spock 和wreq。
Spock 测试教程描述了如何在听起来很棒的水平上测试Spock IO Application
。我不确定的部分是如何“注入”模拟 HTTP 客户端来控制 JSON 响应。
任何帮助表示赞赏!
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 服务器上查看结果。
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 的提示吗?
haskell - 如何使用 Spock 和 Lucid 提供静态文件?
开始使用 Haskell、Spock 和 Lucid 进行 Web 开发,我不知道如何提供我的静态文件。在Main.hs
I 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 会得到相同的结果(翻译如下),所以我一定在其他地方遗漏了一些东西。