проблемы с установкой yesod

#haskell #cabal #yesod

#haskell #cabal #yesod

Вопрос:

Я хочу установить yesod , чтобы немного узнать о Сети и немного поиграть с Haskell в свободное время, но когда я это делаю:

 > cabal install yesod
Resolving dependencies...
cabal: cannot configure cprng-aes-0.2.2. It requires crypto-api >=0.8
For the dependency on crypto-api >=0.8 there are these packages:
crypto-api-0.8. However none of them are available.
crypto-api-0.8 was excluded because skein-0.1.0.1 requires crypto-api ==0.6.*
crypto-api-0.8 was excluded because crypto-api-0.6.4 was selected instead
crypto-api-0.8 was excluded because clientsession-0.7.3.1 requires crypto-api
>=0.6.4 amp;amp; <0.7
  

но я думаю, что у меня установлены правильные пакеты

 cabal list cprng-aes skein crypto-api clientsession
* clientsession
    Synopsis: Securely store session data in a client-side cookie.
    Default available version: 0.7.3.1
    Installed versions: 0.7.3.1
    Homepage: http://github.com/snoyberg/clientsession/tree/master
    License:  BSD3

* cprng-aes
    Synopsis: Crypto Pseudo Random Number Generator using AES in counter mode.
    Default available version: 0.2.2
    Installed versions: 0.2.2
    Homepage: http://github.com/vincenthz/hs-cprng-aes
    License:  BSD3

* crypto-api
    Synopsis: A generic interface for cryptographic operations
    Default available version: 0.8
    Installed versions: 0.6.4, 0.8
    Homepage: http://trac.haskell.org/crypto-api/wiki
    License:  BSD3

* crypto-api-tests
    Synopsis: A test framework and KATs for cryptographic operations.
    Default available version: 0.1
    Installed versions: [ Not installed ]
    Homepage: http://trac.haskell.org/crypto-api/wiki
    License:  BSD3

* hack-middleware-clientsession
    Synopsis: Middleware for easily keeping session data in client cookies.
    Default available version: 0.0.1
    Installed versions: [ Not installed ]
    Homepage: http://github.com/snoyberg/hack-middleware-clientsession/tree/master
    License:  BSD3

* skein
    Synopsis: Skein, a family of cryptographic hash functions. Includes
              Skein-MAC as well.
    Default available version: 0.1.0.1
    Installed versions: 0.1.0.1
    License:  BSD3
  

я мало что знаю, cabal install но кажется, что требуются оба crypto-api >=0.8 и <7 , что кажется невозможным.

Комментарии:

1. 1 и избранное. У меня была именно эта проблема только сегодня, я не мог ее решить и ничего не нашел. ОС и версия? Я использовал Ubuntu 11.10

2. Я использую тестирование debian с haskell-platform-2011.2.0.1 и cabal-0.10.2-3

Ответ №1:

Сопровождающий крипто-API здесь.

ПРОБЛЕМА

Проблема в том, что пакеты являются взаимоисключающими. Для последней версии cprng-aes требуется версия crypto-api >= 0.8 . Для последней версии skein требуется crypto-api 0.6.* . Итак, мы хотим, чтобы произошел разработчик skein (которому я отправлю электронное письмо) для обновления пакета.

НА ДАННЫЙ МОМЕНТ

До этого вам нужно будет установить более старые версии рассматриваемых пакетов. Попробуйте что-то вроде:

 cabal install yesod 'crypto-api == 0.6.4' 'cprng == 0.2.1'
  

Я думаю, что синтаксис правильный. Если нет, вы всегда можете сделать:

 cabal install yesod crypto-api-0.6.4 cprng-0.2.1
  

КАК СООБЩЕСТВО МОЖЕТ ИЗБЕЖАТЬ ЭТОГО

В долгосрочной перспективе я надеюсь, что cabal станет лучше и автоматически найдет совместимые версии, как я сделал для вышеупомянутого. Если не считать таких улучшений cabal, о которых все упоминают и которые никто не реализует, было бы хорошо, если бы разработчики пакетов пытались поддерживать согласованную нижнюю границу для своих сборок. Если cprng-aes все еще принимаются crypto-api >= 0.5 , я думаю, что это было бы установлено cabal. Это слишком много, чтобы требовать от разработчиков пакетов, но они могут сделать это с помощью CPP и {MAX,MIN}_VERSION макросов, предоставляемых cabal.

РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ Фелипе обновил skein и загрузил в hackage. Майкл обновил clientsession и, поскольку он является сопровождающим Yesod и уже участвует в переписке по электронной почте, я уверен, что он скоро загрузит его в hackage. К моменту прочтения этого сообщения все должно быть исправлено, просто запустите:

  cabal update ; cabal install yesod
  

Поразмыслив, я вижу, сколько трафика из-за сбоев основных версий в crypto-api вызывает остальная часть сообщества. Я не уверен, как справиться с этой проблемой. Я мог бы просто заметить, что «никто не пострадает, если я внесу это изменение», и просто порвать с PVP. OTOH, если я нарушу чей-то код, когда не смогу следовать PVP, тогда у них есть законная причина для расстройства. Есть комментарии сообщества?

Комментарии:

1. Отсутствие верхних границ ( 0.6.* похоже < 0.7 ), как вы предлагаете cprng-aes , может, с другой стороны, вызвать другие проблемы, например, сбой компиляции, поскольку, возможно, new cprng-aes 0.8 удалил функцию, которую использовал устанавливаемый пакет.

2. @tarrasch Верно, но обычно считается, что наличие жесткой верхней границы вызывает больше сбоев, чем предотвращает. Это было бы неправдой, если бы cabal работал лучше, но сейчас это просто не реальность.