В Windows пакеты, установленные с помощью cabal, кажутся недоступными в ghc / ghci - PullRequest
2 голосов
/ 03 апреля 2019

Я работаю с последней версией Haskell Platform 8.6.3 в довольно стандартной системе Windows 10 x64.

Теперь у меня есть все шансы получить пакеты, установленные из Hackage, для надежной работы.Относя мои проблемы к локальным проблемам конфигурации, я предпринял все шаги, за исключением сброса моей установки Windows.Я удалил и переустановил Hackage, перезагрузил компьютер, просмотрел все последние файлы конфигурации, какие только мог, в любом скрытом каталоге или иным образом, удалил все ключи реестра, явно связанные с Haskell, большинство из них несколько раз, но все безрезультатно:

Пакетыустановленный с cabal просто не доступен в ghci, WinGHCI, загружается интерактивно с (: m) под ghci или при компиляции с использованием ghc под WinGHCI, независимо от того, что я делаю.

Ниже приведенынекоторые симптомыЕсть предложения?

#cabal new-update
Downloading the latest package list from hackage.haskell.org
To revert to previous state run:
    cabal new-update 'hackage.haskell.org,2019-04-02T19:24:19Z'

#cabal new-install --lib vector
Resolving dependencies...
Up to date

#ghci
Prelude> :m Data.Vector

<no location info>: error:
    Could not find module ‘Data.Vector’
    Perhaps you meant Data.Functor (from base-4.12.0.0)

#ghc -O -optc-O3 -funfolding-use-threshold=16 -fexcess-precision -Wall -Wno-type-defaults -Wno-unused-imports -Wno-unused-top-binds -rtsopts "P663.hs"
[1 of 1] Compiling Main             ( P663.hs, P663.o )

P663.hs:54:1: error:
    Could not find module ‘Data.Vector.Unboxed’
    Use -v to see a list of the files searched for.
   |
54 | import           Data.Vector.Unboxed (Vector, (!))    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 #ghc-pkg list
C:\Program Files\Haskell Platform\8.6.3\lib\package.conf.d
    Cabal-2.4.0.1
    Win32-2.6.1.0
    array-0.5.3.0
    base-4.12.0.0
    binary-0.8.6.0
    bytestring-0.10.8.2
    containers-0.6.0.1
    deepseq-1.4.4.0
    directory-1.3.3.0
    filepath-1.4.2.1
    (ghc-8.6.3)
    ghc-boot-8.6.3
    ghc-boot-th-8.6.3
    ghc-compact-0.1.0.0
    ghc-heap-8.6.3
    ghc-prim-0.5.3
    ghci-8.6.3
    haskeline-0.7.4.3
    hpc-0.6.0.3
    hscolour-1.24.4
    integer-gmp-1.0.2.0
    libiserv-8.6.3
    mtl-2.2.2
    parsec-3.1.13.0
    pretty-1.1.3.6
    process-1.6.3.0
    rts-1.0
    stm-2.5.0.0
    template-haskell-2.14.0.0
    text-1.2.3.1
    time-1.8.0.2
    transformers-0.5.5.0
    xhtml-3000.2.2.1

#ghc-pkg list --user-package-db=C:\Users\Carl\AppData\Roaming\cabal\store\ghc-8.6.3\package.db
C:\Program Files\Haskell Platform\8.6.3\lib\package.conf.d
    Cabal-2.4.0.1
    Win32-2.6.1.0
    array-0.5.3.0
    base-4.12.0.0
    binary-0.8.6.0
    bytestring-0.10.8.2
    containers-0.6.0.1
    deepseq-1.4.4.0
    directory-1.3.3.0
    filepath-1.4.2.1
    (ghc-8.6.3)
    ghc-boot-8.6.3
    ghc-boot-th-8.6.3
    ghc-compact-0.1.0.0
    ghc-heap-8.6.3
    ghc-prim-0.5.3
    ghci-8.6.3
    haskeline-0.7.4.3
    hpc-0.6.0.3
    hscolour-1.24.4
    integer-gmp-1.0.2.0
    libiserv-8.6.3
    mtl-2.2.2
    parsec-3.1.13.0
    pretty-1.1.3.6
    process-1.6.3.0
    rts-1.0
    stm-2.5.0.0
    template-haskell-2.14.0.0
    text-1.2.3.1
    time-1.8.0.2
    transformers-0.5.5.0
    xhtml-3000.2.2.1

C:\Users\Carl\AppData\Roaming\cabal\store\ghc-8.6.3\package.db
    primitive-0.6.4.0
    vector-0.12.0.2

#set GHC_PACKAGE_PATH=C:\Users\Carl\AppData\Roaming\cabal\store\ghc-8.6.3\package.db;
#ghc-pkg list
C:\Program Files\Haskell Platform\8.6.3\lib\package.conf.d
    Cabal-2.4.0.1
    Win32-2.6.1.0
    array-0.5.3.0
    base-4.12.0.0
    binary-0.8.6.0
    bytestring-0.10.8.2
    containers-0.6.0.1
    deepseq-1.4.4.0
    directory-1.3.3.0
    filepath-1.4.2.1
    (ghc-8.6.3)
    ghc-boot-8.6.3
    ghc-boot-th-8.6.3
    ghc-compact-0.1.0.0
    ghc-heap-8.6.3
    ghc-prim-0.5.3
    ghci-8.6.3
    haskeline-0.7.4.3
    hpc-0.6.0.3
    hscolour-1.24.4
    integer-gmp-1.0.2.0
    libiserv-8.6.3
    mtl-2.2.2
    parsec-3.1.13.0
    pretty-1.1.3.6
    process-1.6.3.0
    rts-1.0
    stm-2.5.0.0
    template-haskell-2.14.0.0
    text-1.2.3.1
    time-1.8.0.2
    transformers-0.5.5.0
    xhtml-3000.2.2.1

C:\Users\Carl\AppData\Roaming\ghc\x86_64-mingw32-8.6.3\package.conf.d
    (no packages)
C:\Users\Carl\AppData\Roaming\cabal\store\ghc-8.6.3\package.db
    primitive-0.6.4.0
    vector-0.12.0.2

# ghci
GHCi, version 8.6.3: http://www.haskell.org/ghc/  :? for help
Prelude> :m Data.Vector
Prelude Data.Vector> toList $ empty

Access violation in generated code when reading 0xffffffffffffffff

 Attempting to reconstruct a stack trace...

   Frame        Code address
 * 0x7e5dd90    0x3d7d618 C:\Program Files\Haskell Platform\8.6.3\bin\ghc.exe+0x397d618

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Спасибо за все ответы. Я экспериментировал как с запуском ghc на некоторых версиях UN * X под VirtualBox, так и с удалением платформы Haskell, а также со стеком под Windows 10 x64.

Кажется, что оба позволяют избежать многих проблем, которые я перечислил выше, но стек под Windows кажется немного более легким и лучше интегрируется с моими предпочтительными редакторами (Sublime Text и Visual Studio Code), так что это то, что я собираюсь сделать на данный момент.

В то же время, со всей благодарностью за всю великолепную бесплатную работу, проделанную ребятами из платформы Haskell и автором WinGHCI, я не могу никого убедить, чтобы кто-то читал это достаточно сильно, чтобы держаться от него подальше, в частности, версия 8.6.3 под Windows, по крайней мере, до тех пор, пока все не улучшится.

1 голос
/ 03 апреля 2019

Похоже, вы решили свою проблему, установив GHC_PACKAGE_PATH, верно? Возможно, вы захотите сообщить об этом.

Вторая проблема, во время выполнения ошибка «Нарушение доступа в сгенерированном коде при чтении», по-видимому, документирована здесь:

https://github.com/commercialhaskell/stack/issues/3765

https://gitlab.haskell.org/ghc/ghc/issues/13112

Предположительно, передача -fexternal-interpreter в ghci - это обходной путь. Возможно, вы захотите вручную отредактировать shim-скрипты ghc / ghci, чтобы флаг всегда передавался до тех пор, пока ошибка не будет исправлена.

...