【问题标题】:Haskell sqlite3 codeHaskell sqlite3 代码
【发布时间】:2015-03-10 09:44:29
【问题描述】:

我正在尝试弄清楚如何将 sqlite 模块用于 haskell。这是我的基本代码:

import Database.SQLite

firstTry str = do 
    conn <- openConnection $ "/Users/frkkan96/Documents/src/umecore-hs/testdata/ume.umedb"
    statement <- return $ "select * from segments where label = :n ;"
    b <- execParamStatement conn statement [(":n", Text "First words")]
    closeConnection conn

现在,这不能编译(ghci):

sqlitetest.hs:6:9:
    No instance for (SQLiteResult a0)
      arising from a use of `execParamStatement'
    In a stmt of a 'do' block:
      execParamStatement conn statement [(":n", Text "First words")]
    In the expression:
      do { conn <- openConnection
                   $ "/Users/frkkan96/Documents/src/umecore-hs/testdata/ume.umedb";
           statement <- return $ "select * from segments where label = :n ;";
           execParamStatement conn statement [(":n", Text "First words")];
           closeConnection conn }
    In an equation for `firstTry':
        firstTry str
          = do { conn <- openConnection
                         $ "/Users/frkkan96/Documents/src/umecore-hs/testdata/ume.umedb";
                 statement <- return $ "select * from segments where label = :n ;";
                 execParamStatement conn statement [(":n", Text "First words")];
                 .... }

虽然不知道该怎么做。 execParamStatement_ 有效,但当然不会返回任何内容,这对于了解如何从数据库中获取数据的用处不大。

【问题讨论】:

    标签: database haskell sqlite


    【解决方案1】:

    问题在于execParamStatement :: SQLiteResult a =&gt; SQLiteHandle -&gt; String -&gt; [(String,Value)] -&gt; IO (Either String [[Row a]]) 的类型。这意味着调用者可以选择任何a,只要它是SQLiteResult 的一个实例。但是,由于您实际上并没有将b 用于任何事情,因此编译器只是为其分配了一个类型变量a0

    您需要通过实际使用execParamStatement 的结果或execParamStatement conn statement [(":n", Text "First words")] :: IO (Either String [[Row Value]]) 来指定类型(很可能您希望Value 对应a)。

    【讨论】:

    • 谢谢!一段时间后再次回到 Haskell,我忘记了类型签名的价值,甚至(或特别是)在为弄清楚某事是如何工作而设计的一小段代码中。
    猜你喜欢
    • 2019-05-16
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多