Установка драйвера sqlite в Haskell с использованием стека - PullRequest
0 голосов
/ 28 декабря 2018

У меня установлен sqlite3 в Ubuntu.

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

Я пытаюсь установить драйвер sqlite в Haskell и вижу следующую ошибку:

$ 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, стек, cabal, anaconda, sqlite, я должен допросить, чтобы выяснить, что терпит неудачу?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

TL; DR

stack install sqlite --resolver=lts-11.22 должно работать

Прежде всего, я бы следовал sibi , посоветуйте и установите пакет обслуживания sqlite-simple.

Но если вы хотите использовать устаревшую, мы можем проанализировать ошибку:

  • Ошибка генерируется в части haskell, комбинации stack и haskell.Никакого упоминания о коде c, поэтому sqlite lib (или anaconda) здесь не задействовано

  • Ambiguous occurrence ‘<>’ It could refer to either ‘Prelude.<>’, or ‘Text.PrettyPrint.HughesPJ.<>’: символ <> определяется в двух модулях, а код клиента нене устранять их неоднозначность (конечно, потому что это было только в одном модуле в то время)

  • Таким образом, мы должны скомпилировать с версией Prelude или Text.PrettyPrint.HughesPJ без определения <>

    • Text.PrettyPrint.HughesPJ - это модуль из пакета pretty , и во всех версиях пакета есть оператор экспорта
    • Preludeопределено в base библиотеке и исправлено для каждой версии ghc, что, в свою очередь, исправлено для каждой основной версии stackage resolver .Вы можете установить распознаватель глобального стека в ~/stack/global-project/stack.yaml или в каждом вызове stack с опцией --resolver=
    • Пакет sqlite принимает версии base в диапазоне>=3 && <5 (на самом деле это является причиной проблемы, она слишком гибкая)
    • Если мы ищем <> в списке изменений базы , мыможно увидеть, что он был экспортирован с версии 4.11.0.И эта версия была поставлена ​​с ghc-8.4.1 (вы можете увидеть матрицу между версиями здесь ).Поэтому нам нужно выбрать распознаватель stackage, связанный с предыдущей версией ghc: например, lts-11.22 с ghc-8.2.2
0 голосов
/ 28 декабря 2018

Я пытаюсь установить драйвер sqlite в Haskell и вижу следующую ошибку

Пакет sqlite устарел в пользу sqlite-simpleИтак, я бы порекомендовал вам не использовать это.Если вы ищете гораздо более высокий уровень интерфейса для sqlite, я бы порекомендовал persistent library.

Если вы все еще хотите, чтобы он работал, самый простой способ - просто исправить компиляциюошибки путем разветвления кода и заставить его работать с требуемой версией GHC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...