2015-04-02 89 views
1

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

基本上,我希望能够将我选择的记录附加到路线上。在这个例子中该记录可能看起来像:

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

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

实例

那么,什么是推荐的方式来实现这一目标?我能想到的唯一的办法就是写一个函数myRouteInfo :: Route App -> AdditionalRouteInfo和模式我觉得这种困境很难,但是这种感觉很笨拙,有没有其他办法呢?

回答

2

模式匹配正是我所推荐的,因为它意味着编译器可以检查你是否已经解决了所有的情况。建立在面包屑支持遵循这种方法

+0

谢谢,我实现它的建议虽然我宁愿''路线应用程序''是一个' 'Ord'' :-) – Arno 2015-04-05 07:11:33

+0

您可以随时使用StandaloneDeriving自行获取该实例。 – 2015-04-05 11:01:52