代码之家  ›  专栏  ›  技术社区  ›  Mittenchops

使用堆栈在haskell中安装sqlite驱动程序

  •  0
  • Mittenchops  · 技术社区  · 6 年前

    我在Ubuntu安装了sqlite3。

    $ which sqlite3
    /home/user/anaconda3/bin/sqlite3
    

    我正在尝试在haskell中安装sqlite驱动程序,并看到以下错误:

    $ stack install sqlite
    sqlite-0.5.5: configure
    sqlite-0.5.5: build
    
    --  While building custom Setup.hs for package sqlite-0.5.5 using:
          /tmp/stack16820/sqlite-0.5.5/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/setup/setup --builddir=.stack-work/dist/x86_64-linux/Cabal-2.2.0.1 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
        Process exited with code: ExitFailure 1
        Logs have been written to: /home/user/.stack/global-project/.stack-work/logs/sqlite-0.5.5.log
    
        [1 of 2] Compiling Main             ( /tmp/stack16820/sqlite-0.5.5/Setup.hs, /tmp/stack16820/sqlite-0.5.5/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/setup/Main.o )
        [2 of 2] Compiling StackSetupShim   ( /home/user/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs, /tmp/stack16820/sqlite-0.5.5/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/setup/StackSetupShim.o )
        Linking /tmp/stack16820/sqlite-0.5.5/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/setup/setup ...
        Configuring sqlite-0.5.5...
        Preprocessing library for sqlite-0.5.5..
        Building library for sqlite-0.5.5..
        [1 of 5] Compiling Database.SQL.Types ( Database/SQL/Types.hs, .stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/Database/SQL/Types.o )
    
        /tmp/stack16820/sqlite-0.5.5/Database/SQL/Types.hs:481:37: error:
            Ambiguous occurrence ‘<>’
            It could refer to either ‘Prelude.<>’,
                                     imported from ‘Prelude’ at Database/SQL/Types.hs:15:8-25
                                     (and originally defined in ‘GHC.Base’)
                                  or ‘Text.PrettyPrint.HughesPJ.<>’,
                                     imported from ‘Text.PrettyPrint.HughesPJ’ at Database/SQL/Types.hs:56:1-32
            |
        481 |       FunSQLExpr f es     -> text f <> parens (commaH ppSQLExpr es)
            |                                     ^^
    

    我应该询问哪个GHC,Stack,Cabal,Anaconda,sqlite来找出失败的原因?

    2 回复  |  直到 6 年前
        1
  •  1
  •   jneira    6 年前

    DR

    stack install sqlite --resolver=lts-11.22 应该工作

    首先,我会跟随 sibi 建议并安装维护包 sqlite-simple .

    但如果您要使用不推荐使用的,我们可以分析错误:

    • 该错误在haskell部分中引发,这是 stack haskell . 没有提到C代码,所以 sqlite lib(或水蟒)不在这里。

    • Ambiguous occurrence ‘<>’ It could refer to either ‘Prelude.<>’, or ‘Text.PrettyPrint.HughesPJ.<>’ 辛普尔 <> 在两个模块中定义,客户机代码不会消除它们的歧义(当然,因为当时它只在一个模块中)

    • 所以我们必须用 Prelude Text.PrettyPrint.HughesPJ 没有定义 <>

      • 文本.prettyprint.hughespj 是来自的模块 pretty package 包的所有版本都已导出操作员
      • 这个 序曲 在中定义 base library 每种版本都是固定的 ghc ,对于每个主要版本的 stackage resolver . 可以在中设置全局堆栈冲突解决程序 ~/stack/global-project/stack.yaml 或在每次呼叫中 堆栈 有选择权 --resolver=
      • 这个 package sqlite 接受 基础 范围内的版本 >=3 && <5 (事实上这就是问题的原因,是 灵活的)
      • 如果我们搜索 <> changelog of base 我们可以看到它是从版本导出的 4.11.0 . 那个版本是随附的 ghc-8.4.1 (您可以看到版本之间的矩阵 here )所以我们必须选择 堆垛 链接到早期版本的冲突解决程序 GHC F.E. lts-11.22 with ghc-8.2.2
        2
  •  1
  •   jneira    6 年前

    我正在尝试在haskell中安装sqlite驱动程序,并看到以下错误

    这个 sqlite 包已弃用,取而代之的是 sqlite-simple 所以,我建议你不要用这个。如果您正在寻找一个更高级别的sqlite接口,我建议您 persistent 图书馆。

    如果您仍然想让它工作,最简单的方法就是通过分叉代码来修复编译错误,并使其与所需的GHC版本一起工作。

    推荐文章