【发布时间】:2019-11-23 19:22:32
【问题描述】:
我了解到我可以通过以下方式使用仆人和 Lucid 定义我的 API:
type ClientAPI =
"users" :> Get '[HTML] (Html ())
:<|> "userdata" :> Get '[HTML] (Html ())
然后,如果我想在我的 HTML 中添加指向其中一个端点的链接,我可以使用 Lucid 提供的“a_”函数,例如
a_ [href_ "users"] "Show users"
这种方法的问题是我需要重复两次端点的名称。 “用户”出现在 API 定义和 a_ 标记中。结果,如果我在一个地方更改它,另一个地方会立即停止工作。
有没有办法定义一个可以在两个地方都使用的单一符号?比如:
data MySites = UserSite | UserDataSite -- potentially more
type ClientAPI' =
UserSite :> Get '[HTML] (Html ())
-- ......
let html =
...
a_ [href_ UserSite] "Show users"
...
【问题讨论】:
-
也许
safeLink函数会有所帮助。 hackage.haskell.org/package/servant-0.16.2/docs/… 使用safeLink的代码只有在端点是 api 的实际部分时才会编译。这个 SO 答案包含一个示例 stackoverflow.com/a/41566105/1364288
标签: haskell routing servant haskell-lucid