如何编写Haskell函数来查询数据库?

时间:2017-11-23 05:58:35

标签: sqlite haskell

所以我正在尝试在Haskell中编写一个数据库层,以与SQLite DB进行交互。我在关于数据库的章节中遵循了Real World Haskell一书中的指示。这就是我到目前为止所做的:

key

但我收到错误:

{-# LANGUAGE FlexibleContexts #-}

import Database.HDBC
import Database.HDBC.Sqlite3

db = "dev.db"
conn = connectSqlite3 db

getPerson person =
  quickQuery' conn "select name from person where name like ?" [toSql person]

main :: IO ()
main = do
  print $ getPerson "Michael"

作为Haskell的初学者,我真的不明白。我可以在getPerson上添加一个类型注释,但这似乎并没有解决它。

1 个答案:

答案 0 :(得分:8)

此代码已编译

{-# LANGUAGE FlexibleContexts #-}

import Database.HDBC
import Database.HDBC.Sqlite3
import Data.Convertible.Base

db :: String
db = "dev.db"

getPerson :: (Convertible a SqlValue, IConnection conn) => conn -> a -> IO [[SqlValue]]
getPerson conn person =
  quickQuery' conn "select name from person where name like ?" [toSql person]

main :: IO ()
main = do
    conn <- connectSqlite3 db
    person <- getPerson conn "Michael"
    print person

connectSqlite3 :: FilePath -> IO Connection因此应conn中提取IO monad的值。

也许有更好的方式来使用bind来传递与quickQuery的连接,但我不知道,我从来没有使用过这个库,只是从{{{ 1}}