【问题标题】:Haskell sqlite-simple fold IOHaskell sqlite-简单折叠IO
【发布时间】:2013-07-26 21:25:36
【问题描述】:

我正在尝试使用 Haskell 的 sqlite-simple 包中的 fold_ 函数,但我该如何调用它呢?我将它放在 main 的“do block”中,但我的任何尝试都无法编译。我能够让 query_ 函数工作,但现在我需要一次检索一个值。例如,我正在尝试对数据库中的整数列表求和。

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

【问题讨论】:

  • 尝试在您的 lambda 中给出 valtot 类型签名,如下所示:(\tot val -&gt; (val :: Int) + (tot :: Int))
  • 我终于明白了!事实证明 MySQL-simple 有一个非常相似的 API。这是匿名函数应该是(\tot (Only val) -&gt; return $ (val::Int) + tot )

标签: sqlite haskell fold sqlite-simple


【解决方案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,它的工作原理是一样的!阅读类型签名是最好的起点,但有时还不够。

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多