- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
仆人使用Servant.API.safeLink
生成相对 URL,但我遇到了一个问题,让我觉得我误解了一些关于如何使用它或如何定义 Servant API 的基本知识。
我构建的最小示例包含两个端点。一个旨在成为位于(相对 URL)/foo
的“前门”端点。 , 另一个在 /foo/1
:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Servant
data HTML
type Foo = "foo" :> (Foo0 :<|> Foo1)
type Foo0 = Get '[HTML] String
type Foo1 = "1" :> Get '[HTML] String
slFoo :: Link
slFoo = safeLink (Proxy :: Proxy Foo) (Proxy :: Proxy Foo1)
slFoo
的定义上面给了我错误
Could not deduce: IsElem' ("1" :> Get '[HTML] String) ("foo" :> (Foo0 :<|> Foo1))
...这正是我在要求 safeLink 生成不在其第一个参数定义的 API 中的链接时遇到的错误类型。当第二个参数为 safeLink
时,错误类似是Proxy :: Foo0
相反。
我已经尝试了很多很多的排列组合,但似乎无法通过使用我找到的文档自行解决。我会很感激一些让我弄清楚我的误解所在的指示。
最佳答案
该示例不起作用,因为 Foo1
,您为端点定义的类型,本身并不包含相对于 Foo
顶部的自身的完整路径。 API。
解决这种情况的一种方法是改用“扁平化”API:
safeLink (Proxy :: Proxy (Flat Foo)) (Proxy :: Proxy (Nth 1 (Flat Foo)))
(也需要 import Servant.API.Flatten
)
缺点是必须知道Foo1
的序号位置在 Foo
内.似乎没有办法通过使用问题中指定的类型来获得所需的答案。您可以首先定义扁平化 API,但代价是使结构清晰 (IMO)。
感谢Alp Mestanogullari为了在上面对问题的评论中向我解释这一点。他的回答真的应该归功于他!
关于haskell - 仆人中的安全链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318061/
用Servant实现文件上传API的方法是什么?我正在尝试处理“标准”multipart/form-data 但不知道如何在 Servant 中声明它。 这显然行不通,因为它无法处理多部分: type
我是一名优秀的程序员,十分优秀!