gpt4 book ai didi

haskell - 仆人中的安全链接

转载 作者:行者123 更新时间:2023-12-01 05:49:39 27 4
gpt4 key购买 nike

仆人使用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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com