2014-01-22 4 views
2

Недавно я попытался установить fpco-api на OS X 10.9 через установку cabal, но получил ошибки во время фазы здания. Вот список ошибок:cabal install fpco-api error

... lots of 'loading package' 
Loading package asn1-data-0.7.1 ... linking ... done. 
Loading package asn1-types-0.2.3 ... linking ... done. 
Loading package crypto-pubkey-types-0.4.1 ... linking ... done. 
Loading package pem-0.2.1 ... linking ... done. 
Loading package certificate-1.3.9 ... linking ... done. 
Loading package publicsuffixlist-0.1 ... linking ... done. 
Loading package regex-base-0.93.2 ... linking ... done. 
Loading package regex-posix-0.95.2 ... linking ... done. 
Loading package regex-compat-0.95.1 ... linking ... done. 
Loading package socks-0.5.4 ... linking ... done. 
Loading package crypto-numbers-0.2.3 ... linking ... done. 
Loading package crypto-pubkey-0.2.4 ... linking ... done. 
Loading package tls-1.1.5 ... linking ... done. 
Loading package cipher-rc4-0.1.4 ... linking ... done. 
Loading package tls-extra-0.6.6 ... linking ... done. 
Loading package http-conduit-1.9.6 ... linking ... done. 
Loading package hslogger-1.2.3 ... linking ... done. 
Loading package MissingH-1.2.0.2 ... linking ... done. 
Loading package ConfigFile-1.1.1 ... linking ... done. 
[ 5 of 10] Compiling FP.API.Run (src/library/FP/API/Run.hs, dist/build/FP/API/Run.o) 

src/library/FP/API/Run.hs:37:1: Warning: 
Module `Prelude' does not export `catch' 
[ 6 of 10] Compiling FP.API.TH (src/library/FP/API/TH.hs, dist/build/FP/API/TH.o) 
[ 7 of 10] Compiling FP.Server.Types (src/library/FP/Server/Types.hs, dist/build/FP/Server/Types.o) 

src/library/FP/Server/Types.hs:97:36: 
Ambiguous occurrence `Loc' 
It could refer to either `FP.Server.Types.Loc', 
defined at src/library/FP/Server/Types.hs:115:6 
or `Control.Monad.Logger.Loc', 
imported from `Control.Monad.Logger' at src/library/FP/Server/Types.hs:18:1-27 
(and originally defined in `Language.Haskell.TH.Syntax') 

src/library/FP/Server/Types.hs:102:46: 
Ambiguous occurrence `Loc' 
It could refer to either `FP.Server.Types.Loc', 
defined at src/library/FP/Server/Types.hs:115:6 
or `Control.Monad.Logger.Loc', 
imported from `Control.Monad.Logger' at src/library/FP/Server/Types.hs:18:1-27 
(and originally defined in `Language.Haskell.TH.Syntax') 

src/library/FP/Server/Types.hs:103:46: 
Ambiguous occurrence `Loc' 
It could refer to either `FP.Server.Types.Loc', 
defined at src/library/FP/Server/Types.hs:115:6 
or `Control.Monad.Logger.Loc', 
imported from `Control.Monad.Logger' at src/library/FP/Server/Types.hs:18:1-27 
(and originally defined in `Language.Haskell.TH.Syntax') 

src/library/FP/Server/Types.hs:118:17: 
Ambiguous occurrence `Loc' 
It could refer to either `FP.Server.Types.Loc', 
defined at src/library/FP/Server/Types.hs:115:6 
or `Control.Monad.Logger.Loc', 
imported from `Control.Monad.Logger' at src/library/FP/Server/Types.hs:18:1-27 
(and originally defined in `Language.Haskell.TH.Syntax') 

src/library/FP/Server/Types.hs:119:19: 
Ambiguous occurrence `Loc' 
It could refer to either `FP.Server.Types.Loc', 
defined at src/library/FP/Server/Types.hs:115:6 
or `Control.Monad.Logger.Loc', 
imported from `Control.Monad.Logger' at src/library/FP/Server/Types.hs:18:1-27 
(and originally defined in `Language.Haskell.TH.Syntax') 
Failed to install fpco-api-1.0.5 
cabal: Error: some packages failed to install: 
fpco-api-1.0.5 failed during the building phase. The exception was: 
ExitFailure 1 

Кто-нибудь знает, как справиться с этой ошибкой?

ответ

3

По-видимому, пакет monad-logger начал экспортировать символ Loc, начиная с версии 0.3.4.0. Эта версия не исключается из файла Cabal fpco-api.

Вы можете попробовать

cabal install fpco-api --constraint="monad-logger < 0.3.4" 

заставить использует старую версию monad-logger.


Больше объяснения об ошибке:

Модуль FP.Server.Types в пакете fpco-api определяет тип данных Loc, который используется на протяжении всего пакета. Модуль Language.Haskell.TH.Syntax определяет тип тип данных Loc. Эти модули не используются напрямую fpco-api, но fpco-api использует пакет monad-logger, который, в свою очередь, использует Language.Haskell.TH.Syntax. Это не проблема, поскольку ни в одной точке программы, разные типы Loc не входят в объем. Но в своей последней версии 0.3.4.0 пакет monad-logger решил реэкспортировать тип данных Loc с Language.Haskell.TH.Syntax. Теперь во многих местах, где монада-регистратор импортируется в fpco-api, вдруг оба типа Loc находятся в области видимости, а GHC не знает, к какому из них относятся локальные вхождения Loc.

Правильное исправление этой ошибки относится к fpco-api, чтобы скрывать реэкспорт Loc от монады регистратора или явно ссылаться на правый, используя квалифицированные имена. Но для этого требуется обновление исходного кода fpco-api. Возможно, потребуется временное исправление для использования более старой версии monad-logger.

+0

Благодарим вас за ответ. Я попробую посмотреть результаты. Но я не совсем понимаю причины ошибки :) – d12frosted

+0

@RottenBrain Хорошо, я добавил более подробную информацию :) – kosmikus