2012-04-17 88 views
2

所以我刨使用持久0.9.0.1使用SQLite,和我經歷的教程:http://www.yesodweb.com/book/persistent新手問題持續

簡單的片段,以插入和查詢編譯失敗:

-- START 
{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell, 
      OverloadedStrings, GADTs, FlexibleContexts #-} 
import Database.Persist 
import Database.Persist.TH 
import Database.Persist.Sqlite 
import Control.Monad.IO.Class (liftIO) 

share [mkPersist sqlSettings, mkSave "entityDefs"] [persist| 
Person 
    name String 
    age Int 
|] 

main = withSqliteConn ":memory:" $ runSqlConn $ do 
    runMigration $ migrate entityDefs (undefined :: Person) -- this line added: that's it! 
    michaelId <- insert $ Person "Michael" 26 
    michael <- get michaelId 
    liftIO $ print michael 
-- STOP 

傾銷拼接顯示沒有答應EqShow實例爲生成的人,奇道:

data PersonGeneric (backend :: (* -> *) -> * -> *) 
    = Person {personName :: String, personAge :: Int} 
type Person = 
    PersonGeneric Database.Persist.GenericSql.Raw.SqlPersist 

我砍它是這樣的:

liftIO $ putStrLn $ "name: " ++ (personName $ fromJust michael) ++ ", age: " ++ (show $ personAge $ fromJust michael) 

,然後插入無法從SQLite的獲取主鍵回:

Migrating: CREATE TABLE "person"("id" INTEGER PRIMARY KEY,"name" VARCHAR NOT NULL,"age" INTEGER NOT NULL) 
proto: Pattern match failure in do expression at Database/Persist/GenericSql.hs:109:25-45 

任何想法?持續使用Sqlite嗎?

+1

您能否包含錯誤消息?是「沒有實例嗎?(Show Person)'」? – hammar 2012-04-17 06:27:36

+0

@hammar是的,它是在邁克爾的幫助下解決的。 – 2012-04-18 05:15:25

回答

3

從0.8版本到0.9版本有所變化,默認情況下我們不再包含EqShow實例。要添加它們,添加以下行下方age Int

deriving Show Eq 

這本書仍然是針對耶索德的0.10版本,但我會嘗試在接下來的幾天裏進行更新。

+0

謝謝,這解決了我入侵的第一個問題。 GenericSql.hs中的模式匹配錯誤仍然存​​在。我應該爲Github提交一個bug嗎? – 2012-04-18 01:59:29

+1

我在電子郵件中看到了同樣的評論。它*可能由導管版本0.4.1引起。我在0.4.1.1版本中發佈了一個補丁。你可以嘗試升級到該版本,看看它是否解決了這個問題? – 2012-04-18 03:39:55

+0

就是這樣,謝謝!玩持續的簡歷。 – 2012-04-18 05:10:17