将附加信息附加到 Yesod 路线

Attaching additional information to Yesod routes

对于我的站点,我想将附加信息附加到 Yesod 的路线。例如。我想要特殊的导航路径(上一页、下一页、父页面等)或自动创建一个概览页面,将其用于(分层)面包屑等。

基本上,我希望能够将我选择的记录附加到路线。在示例中,此记录可能如下所示:

data AdditionalRouteInfo = ARI { nextPage :: Maybe (Route App)
                               , prevPage :: Maybe (Route App)
                               , parentPage :: Maybe (Route App)
                               , seeAlso :: [Route App]
                               , description :: String
                               }

Yesod的路由属性只能是字符串,所以这是不够的。我的第一个冲动是使用 Data.Map (Route App) AdditionalRouteInfo 但后来我发现 Route App 不是 Ord 的实例:-(

那么推荐的实现方式是什么?我能想到的唯一方法是编写一个函数 myRouteInfo :: Route App -> AdditionalRouteInfo 并通过模式匹配来摆脱这种困境。但这感觉很笨拙。还有其他办法吗?

模式匹配正是我所推荐的,因为这意味着编译器可以检查您是否解决了所有情况。 Yesod 的内置面包屑支持遵循这种方法。