2
我有一個使用Persistent進行存儲的Snap應用程序,我試圖爲Persistent中定義的數據類型生成類型安全路由。我正在使用snap-web-routes package:。在管理單元中使用帶有持久數據類型的類型安全路由
我有一個創建的Group
和GroupId
數據類型下面模板哈斯克爾功能:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Group
name T.Text
deriving Show
|]
在我Application.hs
我:
data AppUrl = AddLink GroupId deriving (Eq, Show, Read, Generic)
一下文件的建議:
instance PathInfo AppUrl
是我所需要做的給予Generic
推導上述然而,這打擊了
No instance for (PathInfo (KeyBackend SqlBackend Group))
arising from a use of ‘Web.Routes.PathInfo.$gdmtoPathSegments’
我的假設是,這個錯誤表示哈斯克爾不知道如何自動創建具有持續性的數據類型的實例定義。
我的下一個嘗試是手動定義實例:
instance PathInfo AppUrl where
toPathSegments (AddLink groupId) = "add-link" : toPathPiece groupId : []
fromPathSegments (x:y:[]) = ????
我似乎無法弄清楚如何構建GroupId
數據類型。
從耶索德的優秀Persistent tutorial我知道數據類型被定義爲:
type GroupId = Key Group
newtype Key Group = GroupKey (BackendKey SqlBackend)
但後來我遇到一個問題,因爲BackendKey
不外露,所以我不能將其導入並創建自己的實例。我似乎無法找到一個公共的API來在Persistent中創建這種數據類型。
的數據類型對於類是私有的而不是公開的,所以我不能實際導入它。 – jvans
@jvans:不,你爲什麼這麼想?我在我的答案中添加了一個小例子。 – Cactus
啊不知道爲什麼我這麼認爲。必須誤讀錯誤消息。謝謝你的幫助! – jvans