2

そのため、Sqlite で Persistent 0.9.0.1 を使用する予定で、チュートリアルを進めています: 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

splices をダンプすると、生成された Person の promisedEqShowインスタンスが表示されません。奇妙な:

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

何か案は?Persistent は Sqlite で動作しますか?

4

1 に答える 1

3

バージョン0.8から0.9に変更があり、デフォルトEqでインスタンスが含まれなくなりました。Showそれらを追加するには、下に次の行を追加しますage Int

deriving Show Eq

この本はまだYesodのバージョン0.10を対象としていますが、数日中に更新する予定です。

于 2012-04-17T09:55:40.223 に答える