Haskell, Hackage, GHC и производительность. Как решить реальный пример?

Я не знаю, как лучше всего решить простые (вероятно) проблемы (связанные с хакерством).

Я попросил помощи по этому поводу (http://stackoverflow.com/questions/12841599/haskell-hackage-ghc-and-productivity-what-to-do), но я знал, что плохо объясняю.

Сегодня я с этой родственной проблемой.

Конкретная проблема не актуальна, но является ли она:

`Write a function that, given a string, remove diacritics.`

Пример:

`simpleWord "Cigüeñal" <-> "Ciguenal"

Правильный способ (я думаю) - использовать стандартную нормализацию Unicode. В некоторых языках/фреймворках (.Net, PHP, Python,...) существуют некоторые связанные функции.

В Haskell благодаря хакерскому сообществу тоже существует:

`Text.Unicode.Normalization.normalize`

Но я не мог установить с (например) ghc-7.4, но compact-string (это зависит от) терпит неудачу.

Существует исправление для compact-string (compact-string-fix), тогда: не могу ли я использовать cabal для установки (напрямую)? Должен ли я загрузить и исправить его? Должен ли я искать другую альтернативу для работы?

Я объяснил конкретный реальный случай (простой или сложный, все равно), вопрос (по которому я прошу помощи) заключается в том, как начинающему хаскеллеру узнать, как лучше всего выбрать правильные библиотеки, правильную (сбалансированную) версию ghc, без удара о стену.

Я действительно потерял об этом.

Действительно, большое спасибо за любое предложение.

С наилучшими пожеланиями.


person josejuan    schedule 27.10.2012    source источник
comment
Даниил дал решение этой конкретной проблемы. Я не думаю, что есть общий ответ на ваш вопрос. cabal-dev и virthualenv являются частичными решениями проблем с зависимостями пакетов (хотя в данном конкретном случае они не помогут). Я думаю, что в основном это время, потраченное на работу с проектами Haskell и получение опыта использования Cabal и Hackage.   -  person asm    schedule 27.10.2012


Ответы (2)


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

  1. Обычно лучше использовать пакеты, которые в настоящее время поддерживаются. Чтобы определить, поддерживается ли пакет в настоящее время, я проверяю ссылку «Дата загрузки» на странице описания пакета. (Конечно, есть некоторые старые проверенные пакеты, которые не менялись годами, потому что они не нуждаются в модификации.)

  2. Обычно лучше использовать зрелые пакеты, поэтому я проверяю номер версии на странице описания пакета. Пакет с номером версии 7.3.5, вероятно, является более зрелым, чем пакет версии 0.1.

  3. Обычно лучше использовать хорошо документированные пакеты. Иногда в документации Haddock можно найти хороший пример использования пакета (ура!). Я также проверю ссылку «Домашняя страница» на странице описания пакета, потому что часто там будет больше документации.

  4. Обычно лучше использовать популярные пакеты, потому что любые проблемы, скорее всего, будут решены быстро, а другие пользователи смогут ответить на вопросы. Обычно я выполняю поиск в Google и смотрю, какие пакеты чаще всего упоминаются в списках рассылки Haskell и StackOverflow.

  5. Обычно лучше использовать пакеты, которые не требуют большого количества пакетов, которых у меня еще нет, поэтому я проверяю раздел «Зависимости» на странице описания пакета.

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

person mhwombat    schedule 28.10.2012

В документации для compact-string сказано: «Этот пакет устарел. Вместо этого используйте text».

В документации к text говорится: «Чтобы использовать расширенное и очень богатое семейство функций для работы с текстом Unicode (включая нормализацию, регулярные выражения, нестандартные кодировки, разрыв текста и локали), см. пакет text-icu».

Документация для text-icu показывает, что он успешно основан на GHC 7.4 и поддерживает нормализацию Unicode.

person Daniel Wagner    schedule 27.10.2012
comment
Спасибо, Дэниел, но моя проблема была не в компактной строке (конкретная проблема не имеет значения, но так ли это...). Проблема в том, как минимизировать, чтобы найти несовместимые (устаревшие, ...) ссылки, требующие проверки альтернатив. Хотя конкретного решения нет, ответы Эндрю, mhwombat и Дона Стюарта оказались для меня полезными. Спасибо, в любом случае! - person josejuan; 29.10.2012