对于我的网站,我想在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
并模式匹配我的方式摆脱这种困境。但这感觉很笨拙。还有其他办法吗?
答案 0 :(得分:2)
模式匹配正是我所建议的,因为这意味着编译器可以检查您是否解决了所有情况。 Yesod的面包屑支持采用了这种方法。