0

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 は、何も出力しないリスト内包表記を好まないのではないでしょうか?

ヘルプや提案をいただければ幸いです。

4

1 に答える 1

2

いいえ、問題はIOアクションを印刷できないことです。アクションを実行するのではなく、アクションのリストを作成しただけです。

代わりにこれを試してください:

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

または、同等に:

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

結果を気にしない場合mapM_は、わずかに効率的です。

于 2012-11-20T17:26:15.000 に答える