2015-04-02 96 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