Okazuje się, że podążałem tą drogą w niewłaściwy sposób.
Po natknięciu się na wyjątkowo pomocny wpis na blogu Mats Rauhala pod tytułem Example on using HaskellDB, udało mi się napisać projekt testowy, aby odczytać zapisy tabeli books
.
ja najpierw potrzebne do określenia "układ", który za pomocą haskelldb-ty, nie jest tak źle:
{-# 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|])
]
Stamtąd funkcja allBooks
jest:
allBooks db = query db $ do
books <- table B.books
return books
gdzie B
jest kwalifikowaną nazwą importowanego modułu Tables.Books
. allBooks
ma typ:
allBooks :: Database
-> IO
[Record
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Id
Int
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Title
String
Database.HaskellDB.HDBRec.RecNil))]
wydrukowania każdego tytułu, że stosuje się:
main :: IO()
main = do
books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
mapM_ putStrLn (map (\r -> r!B.title) books)
return()
Edycja: utworzonego repozytorium git zawierającego kompletne źródła przykładzie: dtrebbien/haskelldb-example