Haskell - не могу найти пакет

У меня установлен пакет через cabal: Data.Vector

Но когда я пытаюсь скомпилировать программу, в которой есть import Data.Vector:

Drews-MacBook-Pro:Blokus-AI drewgross$ ghc --make -O2 -prof -auto-all playGame

Grid.hs:28:8:
    Could not find module `Data.Vector'
    Perhaps you meant
      Data.Tensor (from Tensor-1.0.0.1)
      Data.Functor (from base)
    Use -v to see a list of the files searched for.
Drews-MacBook-Pro:Blokus-AI drewgross$ 

Для установки я использовал следующую команду:

cabal install -p --reinstall --force-reinstalls vector

Я делал и другие разные вещи, пытаясь скомпилировать свою программу, но ничего не помогло. Я действительно хотел бы просто удалить все, вернуться на круги своя и снова загрузить пакет. Как я могу это сделать?

Изменить: дальнейшее расследование показывает, что может быть 2 версии Data.Vector: 0.10.0.1 и 0.9.1, возможно, они как-то конфликтуют?

Изменить: ghc-pkg check не содержит ошибок, но дает мне массу предупреждений, которые выглядят следующим образом:

Warning: haddock-interfaces: /Users/drewgross/.cabal/share/doc/haskell-lexer-1.0/html/haskell-lexer.haddock doesn't exist or isn't a file

Изменить: GCHi также не находит его

λ> import Data.Vector

<no location info>:
    Could not find module `Data.Vector'
    Perhaps you meant Data.Functor (from base)
λ> 

Изменить: ghc-pkg list vector:

Drews-MacBook-Pro:Blokus-AI drewgross$ ghc-pkg list vector
/Library/Frameworks/GHC.framework/Versions/7.4.2-x86_64/usr/lib/ghc-7.4.2/package.conf.d
/Users/drewgross/.ghc/x86_64-darwin-7.4.2/package.conf.d
   vector-0.10.0.1
Drews-MacBook-Pro:Blokus-AI drewgross$ 

и построение с флагом -v:

Drews-MacBook-Pro:Blokus-AI drewgross$ ghc --make -O2 -prof -auto-all -v playGame
Glasgow Haskell Compiler, Version 7.4.2, stage 2 booted by GHC version 7.4.2
Using binary package database: /usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2/package.conf.d/package.cache
Using binary package database: /Users/drewgross/.ghc/x86_64-darwin-7.4.2/package.conf.d/package.cache
package Cabal-1.16.0.3-e689d8e77b2f476229954cd43b1737bd is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd directory-1.1.0.2-72e928d14fc50f31f7e6404839a15691 unix-2.5.1.1-29636eb78541401e8e00393ef5df097e
package Tensor-1.0.0.1-a8f1a59665c3ebc4867678a14fe1460f is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package binary-0.5.1.1-e62c39c3aba8093e9b9655a4a8d2bce9 is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd bytestring-0.10.0.1-9b03e69060669eabf0b20e150305c7be
package bmp-1.2.3.2-c7572ec2bbb802bfd93fed0953c61d5d is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd binary-0.5.1.1-e62c39c3aba8093e9b9655a4a8d2bce9 bytestring-0.10.0.1-9b03e69060669eabf0b20e150305c7be
package bytestring-0.10.0.1-9b03e69060669eabf0b20e150305c7be is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package ghc-paths-0.1.0.9-4e6c624a3431a4fa7630e4fb77be4c83 is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package haskell-lexer-1.0-8fea1c35b626a2de761522690a88c063 is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package primitive-0.4.1-0007d441db5f4ce1ffd66bd3816c2d4e is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package split-0.2.1.1-03ec5738edb34f2e8967d25637b9392f is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd
package vector-0.10.0.1-3450daae3d9f2092020075d05481123c is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd primitive-0.5.0.1-15cdc8c11a54a78809b647af0c2975b3
wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-7d3c2c69a5e8257a04b2c679c40e2fa7
wired-in package integer-gmp mapped to integer-gmp-0.4.0.0-af3a28fdc4138858e0c7c5ecc2a64f43
wired-in package base mapped to base-4.5.1.0-47f48c3ae7f8256a66a23e9dfe22eefc
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.7.0.0-e109822dcbed82c43f9fa60194eb64b5
wired-in package dph-seq not found.
wired-in package dph-par not found.
Hsc static flags: -fscc-profiling -static
*** Chasing dependencies:
Chasing modules from: *playGame.hs

Grid.hs:28:8:
    Could not find module `Data.Vector'
    Perhaps you meant Data.Functor (from base)
    Locations searched:
      Data/Vector.hs
      Data/Vector.lhs
*** Deleting temp files:
Deleting: 
*** Deleting temp dirs:
Deleting: 
Drews-MacBook-Pro:Blokus-AI drewgross$ 

Вот что использует оболочка:

Drews-MacBook-Pro:Blokus-AI drewgross$ which ghc
/usr/bin/ghc

Я сделал cabal install -v lens, и, очевидно, было получено много результатов, но я думаю, что это важная часть:

Registering lens-3.7.0.2...
/usr/bin/ghc-pkg update - --global --user
Updating world file...
Drews-MacBook-Pro:Blokus-AI drewgross$ 

Что, кажется, указывает на то, что они используют одну и ту же версию. Я могу опубликовать больше результатов установки Кабала, если это актуально.

Изменить: больше вывода ghc из cabal install -v

Building lens-3.7.0.2...
Preprocessing library lens-3.7.0.2...
Building library...
creating dist/build
/usr/bin/ghc --make -package-name lens-3.7.0.2 -hide-all-packages -fbuilding-cabal-package -i -idist/build -isrc -idist/build/autogen -Idist/build/autogen -Idist/build -optP-DTRUSTWORTHY=1 -optP-DDEFAULT_SIGNATURES=1 -optP-include -optPdist/build/autogen/cabal_macros.h -odir dist/build -hidir dist/build -stubdir dist/build -package-id array-0.4.0.0-0b6c5ca7e879a14d110ca4c001dd9297 -package-id base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd -package-id bytestring-0.9.2.1-0044644a71adfe5e950e6c6f6ca13065 -package-id comonad-3.0.0.2-6ef27fce8536ebdf9c364307a0915f63 -package-id comonad-transformers-3.0-a6df581636b1c9b514cfa6560f17d6a3 -package-id comonads-fd-3.0-b906ed7898871c5d2427052e2eefa62e -package-id containers-0.4.2.1-75f143aa39a3e77a1ce2300025bdd8ce -package-id filepath-1.3.0.0-f998e5510c76a98913f57b14b4f16c57 -package-id ghc-prim-0.2.0.0-7d3c2c69a5e8257a04b2c679c40e2fa7 -package-id hashable-1.1.2.5-14291f3b4e96b5599759ce7daa2bd37c -package-id mtl-2.1.2-02e701f9b1590ee88a0b5b0bd5d93a29 -package-id parallel-3.2.0.3-4cdd6067624f867b253b98d6d9fb9f52 -package-id semigroups-0.8.4.1-4d3a86b037504e6000a0354510588745 -package-id split-0.2.1.1-03ec5738edb34f2e8967d25637b9392f -package-id template-haskell-2.7.0.0-29110cc89a711d6ab3e7ee0e0a8ee949 -package-id text-0.11.2.3-473d9a1761b27c7315f2ef4569d93c3c -package-id transformers-0.3.0.0-8e66ecc7d4dae2b07b2b5406908c70e4 -package-id unordered-containers-0.2.2.1-d70d5ccb1df11dbbbaac89571b1ee46d -package-id vector-0.10.0.1-3450daae3d9f2092020075d05481123c -O -Wall -fwarn-tabs -O2 -fdicts-cheap -funbox-strict-fields -XHaskell98 Control.Lens.TH Language.Haskell.TH.Lens Control.Exception.Lens Control.Lens Control.Lens.Action Control.Lens.Classes Control.Lens.Combinators Control.Lens.Fold Control.Lens.Getter Control.Lens.Indexed Control.Lens.IndexedGetter Control.Lens.IndexedFold Control.Lens.IndexedLens Control.Lens.IndexedSetter Control.Lens.IndexedTraversal Control.Lens.Internal Control.Lens.Internal.Zipper Control.Lens.Iso Control.Lens.Loupe Control.Lens.Plated Control.Lens.Prism Control.Lens.Representable Control.Lens.Setter Control.Lens.Simple Control.Lens.Traversal Control.Lens.Tuple Control.Lens.Type Control.Lens.WithIndex Control.Lens.Wrapped Control.Lens.Zipper Control.Lens.Zoom Data.Bits.Lens Data.ByteString.Lens Data.ByteString.Strict.Lens Data.ByteString.Lazy.Lens Data.Complex.Lens Data.Data.Lens Data.Dynamic.Lens Data.HashSet.Lens Data.IntSet.Lens Data.List.Lens Data.List.Split.Lens Data.Sequence.Lens Data.Set.Lens Data.Text.Lens Data.Text.Strict.Lens Data.Text.Lazy.Lens Data.Tree.Lens Data.Typeable.Lens Data.Vector.Lens Data.Vector.Generic.Lens GHC.Generics.Lens Data.Array.Lens System.FilePath.Lens Control.Parallel.Strategies.Lens Control.Seq.Lens Control.Lens.Internal.Combinators
[ 1 of 57] Compiling Control.Lens.Classes ( src/Control/Lens/Classes.hs, dist/build/Control/Lens/Classes.o )
[ 2 of 57] Compiling Control.Lens.Internal ( src/Control/Lens/Internal.hs, dist/build/Control/Lens/Internal.o )
[ 3 of 57] Compiling Control.Lens.Internal.Combinators ( src/Control/Lens/Internal/Combinators.hs, dist/build/Control/Lens/Internal/Combinators.o )
[ 4 of 57] Compiling Control.Lens.Indexed ( src/Control/Lens/Indexed.hs, dist/build/Control/Lens/Indexed.o )
[ 5 of 57] Compiling Control.Lens.IndexedGetter ( src/Control/Lens/IndexedGetter.hs, dist/build/Control/Lens/IndexedGetter.o )
[ 6 of 57] Compiling Control.Lens.Action ( src/Control/Lens/Action.hs, dist/build/Control/Lens/Action.o )
[ 7 of 57] Compiling Control.Lens.Setter ( src/Control/Lens/Setter.hs, dist/build/Control/Lens/Setter.o )

Изменить: дамп ghc-pkg

Drews-MacBook-Pro:Blokus-AI drewgross$ ghc-pkg dump | grep "id: base"
id: base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd

person Drew    schedule 10.12.2012    source источник
comment
Что ghc-pkg list vector говорит вам, и получите ли вы больше полезной информации при компиляции playGame с опцией -v?   -  person Daniel Fischer    schedule 10.12.2012
comment
@DanielFischer Я добавил вывод этих команд   -  person Drew    schedule 11.12.2012


Ответы (4)


База данных ваших пакетов сильно повреждена. В выходных данных ghc -v перечислены десять пакетов, непригодных для использования из-за отсутствия или рекурсивных зависимостей, среди которых vector:

package vector-0.10.0.1-3450daae3d9f2092020075d05481123c is unusable due to missing or recursive dependencies:
  base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd primitive-0.5.0.1-15cdc8c11a54a78809b647af0c2975b3

У всех сломанных пакетов есть одна общая черта - это отсутствующая (?) Зависимость.

base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd

где

wired-in package base mapped to base-4.5.1.0-47f48c3ae7f8256a66a23e9dfe22eefc

Используемая база имеет другой хеш.

Я не уверен, как это произошло, насколько мне известно, переустановить base невозможно, но похоже, что у вас есть два экземпляра ghc-7.4.2, и они наступают друг другу на пятки.

ghc-pkg list использует

/Library/Frameworks/GHC.framework/Versions/7.4.2-x86_64/usr/lib/ghc-7.4.2/package.conf.d

для глобальной базы данных пакетов, в то время как компиляция использует

Using binary package database: /usr/local/Cellar/ghc/7.4.2/lib/ghc-7.4.2/package.conf.d/package.cache

Возможно, хотя бы одна из двух является символической ссылкой, и они оба указывают на одно и то же место - тогда ваш package.cache не синхронизирован - но

Glasgow Haskell Compiler, Version 7.4.2, stage 2 booted by GHC version 7.4.2

GHC, загруженный той же версией, кажется необычным.

Можете ли вы определить, действительно ли у вас два ghc-7.4.2, а в командной строке используется другой, чем тот, который использует cabal? which ghc сообщает вам, какой из них использует оболочка, а cabal install -v some-package выводит используемую cabal командную строку, включая полный путь к используемому GHC.

person Daniel Fischer    schedule 10.12.2012
comment
Я добавил вывод этих программ. Кажется, они используют тот же ghc. - person Drew; 11.12.2012
comment
Я бы хотел увидеть командную строку компиляции. ghc-pkg от /usr/bin указывает, что они используют то же самое, но я бы предпочел быть уверенным. - person Daniel Fischer; 11.12.2012
comment
Хорошо, я добавил еще кое-что из компиляции. Определенно, похоже, использует /usr/bin/ghc - person Drew; 11.12.2012
comment
Верно. Но из командной строки мы можем прочитать, что cabal передает -package-id base-4.5.1.0-81d626fb996bc7e140a3fd4481b338cd в ghc, поэтому он явно требует отсутствующей (или нет?) Версии base. Теперь вопрос в том, откуда cabal это взялось. Расследование. - person Daniel Fischer; 11.12.2012
comment
@Drew Источник Кабала (и Кабала) слишком велик, чтобы я мог быть уверен, но похоже, что Кабала использует ghc-pkg dump, чтобы узнать, что доступно. Можете ли вы сделать ghc-pkg dump | grep "id: base", чтобы узнать, какая базовая версия (в частности, хеш ABI) сообщает? - person Daniel Fischer; 11.12.2012
comment
добавил вывод. Хеш 81d626fb996bc7e140a3fd4481b338cd - person Drew; 11.12.2012
comment
позвольте нам продолжить это обсуждение в чате - person Daniel Fischer; 11.12.2012

Вы можете перечислить установленные пакеты с помощью ghc-pkg list. Например (видимо мне нужно обновить),

$ ghc-pkg list | grep vector
    vector-0.9.1
    vector-algorithms-0.5.4
    vector-algorithms-0.5.4.2
    vector-space-0.8.0
    vector-strategies-0.3

Вы можете отменить регистрацию с помощью ghc-pkg unregister. Бывший,

$ ghc-pkg unregister vector-0.9.1

И тогда cabal update && cabal install vector должен забрать последнюю версию с хакера.

person jtobin    schedule 10.12.2012
comment
Похоже, не сработало. Каждый шаг прошел нормально, но в конце он все еще не мог найти Data.Vector - person Drew; 10.12.2012
comment
Если вы откроете GHCi и наберете import Data.Vector, что-нибудь произойдет? - person jtobin; 10.12.2012
comment
GHCi тоже не может его найти (добавил это к вопросу) - person Drew; 10.12.2012

У меня была аналогичная проблема с другим модулем после того, как я установил платформу Haskell поверх существующей (самодельной) установки ghc [Mac OS Mavericks 10.9. +]. Я удалил предыдущий ghc с помощью homebrew

brew uninstall ghc

и повторно запустили установщик платформы Haskell (.pkg на Mac). Тогда мне пришлось

sudo ghc-pkg recache

устранить устаревшее предупреждение при

ghc-pkg list

Это решило проблему в моем случае.

person c.gutierrez    schedule 16.08.2014

Вы можете добавить пакет в свой .cabal файл

person raam86    schedule 28.11.2018