Nó chỉ ra rằng tôi đã đi về điều này một cách sai lầm.
Sau khi vấp ngã khi bài đăng trên blog của Mats Rauhala cực kỳ hữu ích có tiêu đề Example on using HaskellDB, tôi có thể viết một dự án thử nghiệm để đọc các bản ghi của bảng books
.
đầu tiên tôi cần thiết để xác định "bố trí", trong đó, sử dụng haskelldb thứ, không phải là quá xấu:
{-# 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|])
]
Từ đó, allBooks
chức năng là:
allBooks db = query db $ do
books <- table B.books
return books
nơi B
là tên đủ điều kiện của mô-đun đã nhập Tables.Books
. allBooks
có các loại:
allBooks :: Database
-> IO
[Record
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Id
Int
(Database.HaskellDB.HDBRec.RecCons
Tables.Books.Title
String
Database.HaskellDB.HDBRec.RecNil))]
Để in ra mỗi tiêu đề, tôi đã sử dụng:
main :: IO()
main = do
books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
mapM_ putStrLn (map (\r -> r!B.title) books)
return()
EDIT: Tôi tạo ra một kho git chứa nguồn hoàn chỉnh của ví dụ này: dtrebbien/haskelldb-example