2010-11-06 2 views
8

Cabal имеет проблемы с зависимостью постоянно. Это действительно утомительно. До сих пор я пытался получить много вещей, которые работают, вот моя попытка установить оснастку:Использование каббала (Haskell)

 
$ sudo cabal install snap-server 
Resolving dependencies... 
cabal: cannot configure ListLike-1.1.0. It requires mtl >=1.1.0 && 1.2 
For the dependency on mtl >=1.1.0 && 1.2 there are these packages: 
mtl-1.1.0.0, mtl-1.1.0.1, mtl-1.1.0.2 and mtl-1.1.1.0. However none of them 
are available. 
mtl-1.1.0.0 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.0 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.0.1 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.1 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.0.2 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.2 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.1.0 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.1.0 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 

Я подобные проблемы с установкой Happstack и т.д. Какова процедура, чтобы сделать междусобойчик ... работать? Я уже пробовал:

export PATH=/home/user/.cabal/bin:$PATH 

ответ

7

Проблема заключается в том, что оснастка сервера 0.2.15 имеет неограниченную зависимость от монады-ФД. Самая последняя версия, monads-fd-0.1.0.3, требует mtl-2. * К сожалению, это конфликтует с зависимостью от ListLike (через iteratee), для которой требуется mtl < 2.0. Оба эти ограничения не могут выполняться одновременно, поэтому каблят отказывается.

Попробуйте запустить cabal install snap-server --constrain="monads-fd=0.1.0.2". Это заставит более раннюю версию monads-fd, которая не требует mtl, и я думаю, что все будет работать правильно.

Если у вас возникли проблемы с большим количеством пакетов, возможно, это связано с недавно загруженным новым mtl. Вы можете попробовать добавить --constrain="mtl<2", что может помочь.

Мораль для сопровождающих: следуйте Haskell PVP и всегда используйте верхние границы зависимостей.

N.B. Даже если я загружу новый ListLike, который работает с mtl-2 (что я сделаю очень скоро), это не решит вашу проблему, потому что новый ListLike не будет выбран из-за верхней границы итерации.

+0

«Даже если я загружаю новый ListLike ..., это не решит вашу проблему» Мораль: никогда не используйте верхние границы. Шутка :) Похоже, нам нужно что-то более стабильное, а затем взломать и менее стабильно, чем HP. Что-то между ними. – Yuras

+1

@Yuras, я согласен (и я понял, что верхние границы предотвратили одно решение, когда я печатал). Если хакеры требовали верхних границ во всем, это значительно улучшило бы стабильность. Чем больше я работаю с номерами каббала и версий, тем больше я убежден, что автоуслуги поняли это правильно. –

+0

Yikes, cabal требует много знаний о пакетах для использования! Это меня огорчает :-( – 0atman