Cabal установить ошибку fpco-api

Недавно я попытался установить fpco-api на OS X 10.9 с помощью установки Cabal, но получил ошибки на этапе сборки. Вот список ошибок:

... 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

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


person d12frosted    schedule 22.01.2014    source источник


Ответы (1)


Похоже, что пакет 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 должно быть достаточно.

person kosmikus    schedule 22.01.2014
comment
Спасибо за ваш ответ. Попробую посмотреть на результаты. Но я не совсем понимаю причины ошибки :) - person d12frosted; 22.01.2014
comment
@RottenBrain Хорошо, я добавил больше деталей :) - person kosmikus; 22.01.2014