2012-11-20 77 views
0

我試圖使用Database.HDBC和Database.HDBC.Sqlite3。使用HDBC/Haskell將程序內多個條目添加到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不喜歡不打印任何東西的列表解析?

任何幫助或建議將grely讚賞。

回答

2

不,問題是IO動作無法打印。看,你只構建了一個動作列表,而不是運行它們。

試試這個:

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

或等價:

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

如果你不關心結果,mapM_會更有效。

+0

看起來我應該花更多時間研究地圖功能。我一直試圖用列表解析來做所有事情。感謝您的時間和幫助。 –

相關問題