gpt4 book ai didi

haskell - 包含 `Maybe a` 参数的 Yesod 路由

转载 作者:行者123 更新时间:2023-12-03 22:15:59 26 4
gpt4 key购买 nike

我一直在尝试使用 Maybe a在一条 route 。到目前为止我试过

/u/#Maybe UserId
/u/#(Maybe UserId)
/u/#Maybe-UserId



/u/#MaybeUserId

在哪里

type MaybeUserId = Maybe UserId

但没有太大的成功。

奇怪的是, #Maybe-UserId使用 Maybe UserId 的处理程序可以正常编译但是,即使使用新的 PathPiece 也无法找到匹配项下面的例子。

instance (PathPiece a) => PathPiece (Maybe a) where
fromPathPiece s = case s of
"Nothing" -> Nothing
_ -> Just $ fromPathPiece s
toPathPiece m = case m of
Just s -> toPathPiece s
_ -> "Nothing"

我缺少什么来创建 Maybe路由,而不必为每个 Maybe a 声明一个类型和实例我想用什么?

编辑:该实例在使用 Ǹothing 以外的任何东西时都可以正常工作由于某些原因。

编辑2: "Nothing" -> Nothing实际上表明 PathPiece解析失败,这不是预期的结果。 "Nothing" -> Just Nothing做正确的事。

最佳答案

带有空参数(以斜杠结尾)的路由将恢复为以前一个路径片段结尾的路由,因此“/u/”永远不会匹配“/u/#MaybeUserId”

因此,您的可选 UserId 命题中有两条不同的路线:

/u  UserNoIdR  GET

/u/#UserId UserWithIdR GET

更新:

如果您愿意,您可以从一个共同的处理程序中为它们提供服务:
getUserNoIdR = getUserMaybe Nothing

getUserWithIdR userId = getUserMaybe (Just userId)

关于haskell - 包含 `Maybe a` 参数的 Yesod 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352722/

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