Resulta que estaba haciendo esto de la manera incorrecta.
Después de tropezar con Mats Rauhala 's muy útil post titulado Example on using HaskellDB, yo era capaz de escribir un proyecto de prueba para leer los registros de la tabla books
.
primera vez que necesita para definir el "diseño", el cual, usando haskelldb-ésimo, no es tan malo:
{-# 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|])
]
A partir de ahí, la función allBooks
es:
allBooks db = query db $ do
books <- table B.books
return books
donde B
es el nombre calificado del módulo importado Tables.Books
. allBooks
tiene el tipo:
allBooks :: Database
-> IO
[Record
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Id
Int
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Title
String
Database.HaskellDB.HDBRec.RecNil))]
Para imprimir cada título, I utilizado:
main :: IO()
main = do
books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
mapM_ putStrLn (map (\r -> r!B.title) books)
return()
EDIT: I creado un repositorio git que contiene las fuentes completas de este ejemplo: dtrebbien/haskelldb-example