2013-07-26 46 views
1

我想從Haskell的sqlite簡單包使用fold_函數,但我該如何調用它?我主要在'do block'中,但我的嘗試都沒有能夠編譯。我能夠使query_函數正常工作,但現在我需要逐個檢索一個值。作爲一個例子,我試圖從數據庫中總結一個整數列表。Haskell sqlite簡單摺疊IO

main :: IO() 
main = do 
    conn <- open "C:\\project.DB" 
    theSum <- fold_ conn "SELECT rserial from conitr1" 0 (\tot val -> val + tot) 
    close conn 

據我所知,它正在做一個IO操作,我可能需要指定某處的類型,但沒有任何我嘗試似乎工作。 API文檔是在這裏http://hackage.haskell.org/packages/archive/sqlite-simple/0.4.2.0/doc/html/Database-SQLite-Simple.html#v:fold

+0

嘗試在您的lambda中給出'val'和'tot'類型簽名,如下所示:'(\ tot val - >(val :: Int)+(tot :: Int))''。 –

+0

我終於明白了!事實證明MySQL-simple具有非常類似的API。這裏是匿名函數應該是'(\ tot(Only val) - > return $(val :: Int)+ tot)' – DOKKA

回答

1
main :: IO() 
main = do 
    conn <- open "C:\\project.DB" 
    theSum <- fold_ conn "SELECT rserial from conitr1" 0 (\tot (Only val) -> return $ (val::Int) + tot) 
    close conn 

我發現一個例子這裏https://github.com/nurpax/db-bench/blob/master/haskell/Sqlite.hs#L24,它的工作原理是一樣的!閱讀類型簽名是最好的開始,但有時候還不夠。