私はこれを間違った方法で行っていたことがわかりました。
Mats Rauhalaの非常に役立つブログ投稿「HaskellDBの使用例books
」に出くわした後、テーブルのレコードを読み取るためのテストプロジェクトを作成することができました。
最初に「レイアウト」を定義する必要がありました。これは、haskelldb-thを使用して、それほど悪くはありません。
{-# LANGUAGE TemplateHaskell #-}
module Tables.Books (
books
, id
, title
, Books
) where
import Database.HaskellDB.CodeGen
import Prelude hiding (id)
mkDBDirectTable "Books" [
("id", [t|Int|])
, ("title", [t|String|])
]
そこから、allBooks
関数は次のようになります。
allBooks db = query db $ do
books <- table B.books
return books
ここB
で、はインポートされたモジュールの修飾名ですTables.Books
。allBooks
タイプがあります:
allBooks::データベース
-> IO
[記録
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Id
Int
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Title
弦
Database.HaskellDB.HDBRec.RecNil))]
各タイトルを印刷するために、私は使用しました:
main :: IO ()
main = do
books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
mapM_ putStrLn (map (\r -> r!B.title) books)
return ()
編集:この例の完全なソースを含むgitリポジトリを作成しました:dtrebbien / haskelldb-example