haskell - 如何在 Obelisk 中正确地进行嵌套路由?
问题描述
我一直在搜索示例,但是大多数示例都执行一个RouteSomething -> PathSegment "firstpath" $ unitEncoder mempty
而不是单个嵌套路由。
有一些示例用于Cat.id
将整个 URI 作为 Text 传递,例如Characher-Sheet:
backendRouteEncoder = mkFullRouteEncoder
(FullRoute_Backend BackendRoute_Missing :/ ())
(\case
BackendRoute_API -> PathSegment "api" $ Cat.id
BackendRoute_Missing -> PathSegment "missing" $ unitEncoder mempty
)
然后在后端解析整个路由:
server sql (BackendRoute_API :=> Identity _) = dir "api" $
route [ ("spelllist/", runReaderT spellListHandler sql)
, ("featlist/", runReaderT featListHandler sql)
]
但是,这感觉很奇怪,因为我原以为所有路由都将Common.Route
按照Obelisk.Route
框架的框架ob init
和其他仅在此处定义路由的示例来定义。我希望 LambdaCase 对编码路由的数据类型进行详尽检查的安全性,并且不必在所有可能的后端/前端子路由上添加等效的 BackendRoute_Missing。
解决方案
data FrontendRoute :: * -> * where
FrontendRoute_Sub :: FrontendRoute (R SubRoute)
data SubRoute :: * -> * where
SubRoute_Foo :: SubRoute ()
然后替换unitEncoder
为pathComponentEncoder $ \case ...
另一个例子参见obelisk-oauth。
推荐阅读
- css - 变换原点:100% 不适用于变换旋转
- c++ - 我可以更改 SAXPY 函数的公式吗?
- mongodb - 带有kotlin的spring boot mongo querydsl不生成元数据类
- ios - 如何更改缩进 UItableview 单元格的左边框颜色
- java - 如何使用 XAdES4j 对 xml 进行签名,并引用 URI (#DatosEmision)?
- android - android片段视图即使在onCreateView中初始化后也会抛出空指针异常
- python - ValueError:从文本文件解析列表时出现格式错误的节点或字符串错误
- apache-spark - 根据 PySpark 中的时区将 UTC 时间戳转换为本地时间
- github-actions - 从 git 操作容器推送时,Git 推送操作不起作用
- java - Java最大函数递归