所以我正在尝试在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上添加一个类型注释,但这似乎并没有解决它。
答案 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}}