gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:21:34 26 4
gpt4 key购买 nike

因此,我试图在Haskell中编写数据库层,以与SQLite DB交互。在有关数据库的章节中,我正在遵循《真实世界Haskell》一书中的说明。这是我到目前为止的内容:

{-# 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"


但是我得到了错误:

Could not deduce (IConnection (IO Connection))
arising from a use of ‘quickQuery'’
from the context: convertible-1.1.1.0:Data.Convertible.Base.Convertible
a SqlValue
bound by the inferred type of
getPerson :: convertible-1.1.1.0:Data.Convertible.Base.Convertible
a SqlValue =>
a -> IO [[SqlValue]]


作为Haskell初学者,我不太了解。我可以在getPerson上放置类型注释,但这似乎并不能解决。

最佳答案

此代码已编译

{-# 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,但是我不知道,我从未使用过此库,只是从 ghci中的类型猜测

关于sqlite - 如何编写Haskell函数来查询数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47448544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com