4
我試圖使用持久與Yesod從我的數據庫中的表中獲取所有字段鍵的列表。我的訪問代碼如下:「類型變量不明確」與Haskell中的持久Yesod
getMapList :: Handler [Text]
getMapList = runDB $ do
dbList <- selectList [] []
return (map getMapName dbList)
where getMapName (Entity (Key (PersistText mapName)) _) = mapName
請注意,這是一個遊戲:「地圖」在這裏是遊戲意義上的地圖,而不是在哈斯克爾感。
我得到以下錯誤,它表明類型推理引擎根據我使用的數據庫後端無法計算出我的類型。
Handler/Create.hs:101:13:
Couldn't match type `PersistEntityBackend t0'
with `persistent-1.2.3.0:Database.Persist.Sql.Types.SqlBackend'
The type variable `t0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Expected type: PersistMonadBackend (SqlPersistT (HandlerT App IO))
Actual type: PersistEntityBackend t0
In a stmt of a 'do' block: dbList <- selectList [] []
In the second argument of `($)', namely
`do { dbList <- selectList [] [];
return (map getMapName dbList) }'
In the expression:
runDB
$ do { dbList <- selectList [] [];
return (map getMapName dbList) }
有沒有人知道如何解決這個問題?我需要添加到類型簽名才能正確地進行類型檢查?謝謝!
編輯:我的模型定義爲這樣:
GameMap
mapName Text
mapCode Text
UniqueGameMap mapName
deriving Typeable
我試着用GameMapGeneric代替KingsLadiesInWaitingGenerc,我得到以下錯誤:不在範圍內:類型構造函數或類「GameMapGeneric」。有什麼特別的我需要導入?我正在使用一個腳手架站點,所以我已經把這個分散在一堆文件上,我的處理程序都在他們自己的文件中。 – jmite
當您運行「yesod init」時,它應該創建一個名爲Model.hs的文件,您需要使用該函數在文件中導入該文件。實際模型應該在config/models中,因此您還可以驗證表「GameMap」存在。 – jamshidh
我仍然得到錯誤,當我做「導入模型(GameMapGeneric)」我得到「模塊'模型'不導出'GameMapGeneric'」。有什麼想法嗎?非常感謝迄今爲止所有的幫助。 – jmite