使用HDBC / Haskell将程序中的多个条目添加到SQLite3数据库

时间:2012-11-20 17:21:28

标签: database haskell sqlite hdbc

我正在尝试使用Database.HDBC和Database.HDBC.Sqlite3。

要将表添加到SQLite3数据库,这是我输入GHCI的那种命令:

run conn "CREATE TABLE table1 (a INTEGER)" []

我现在想使用一个字符串列表来从我的程序中将表名添加到数据库中。

这是我正在使用的变量:

tables = ["CREATE TABLE t1 (a INTEGER)","CREATE TABLE t2 (a INTEGER)",..]

表被传递给我做的名为addTables的函数:

addTables xs = [ run conn x [] | x <- xs ]

但是我的addTables函数返回了这个错误:

<interactive>:199:1:
    No instance for (Show (IO Integer))
      arising from a use of `print'
    Possible fix: add an instance declaration for (Show (IO Integer))
    In a stmt of an interactive GHCi command: print it

我怀疑Haskell不喜欢不打印任何内容的列表推导?

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:2)

不,问题是无法打印IO个操作。看,你只构建了一个动作列表,而不是运行它们。

请改为尝试:

addTables xs = sequence [run conn x [] | x <- xs]

或等同于:

addTables xs = mapM (\x -> run conn x []) xs

如果您不关心结果,mapM_稍微提高效率。