ログ日記

作業ログと日記とメモ

persistentで自動生成されたコードを見る

Template Haskellで生成されたコードを見る手順メモ。


http://www.yesodweb.com/book/persistent
ここのサンプルをファイルに保存する。分かりやすいようにpersistの定義は別関数にする。

runPersist = [persist|
Person
    name String
    nick String
    age Int Maybe
BlogPost
    title String
    authorId PersonId
|]

そしてghciで開く。

*Main> :t runPersist
runPersist :: [EntityDef]

*Main> let expr = share [mkPersist sqlSettings] runPersist
Loading package persistent-sqlite-0.8.0 ... linking ... done.

*Main> :t expr
expr
  :: Language.Haskell.TH.Syntax.Q [Language.Haskell.TH.Syntax.Dec]

*Main> :m +Language.Haskell.TH
*Main Language.Haskell.TH> 

*Main Language.Haskell.TH> :t runQ expr
runQ expr :: Language.Haskell.TH.Syntax.Quasi m => m [Dec]

*Main Language.Haskell.TH> q <- runQ expr
*Main Language.Haskell.TH> :t q
q :: [Dec]

*Main Language.Haskell.TH> ppr q
instance Database.Persist.Store.PersistField (PersonGeneric backend)
    where sqlType _ = Database.Persist.Store.SqlString
... 以下出力