Haskell, Hackage, GHC и производительность. Как решить реальный пример?
Я не знаю лучший способ решить простые (вероятно) проблемы (связанные с хакерством).
Я попросил о помощи по этому поводу (http://stackru.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, ...) существуют некоторые связанные функции.
В Хаскеле благодаря хакерскому сообществу тоже существует:
`Text.Unicode.Normalization.normalize`
Но я не мог установить с (например) ghc-7.4, но compact-string
(это зависит от) потерпеть неудачу.
Исправление для compact-string
существует (compact-string-fix
) тогда: я не могу использовать cabal для установки (напрямую)?, я должен загрузить и исправить это?, я должен искать другую альтернативу для функции?
Я объяснил конкретный реальный случай (простой или сложный, безразличный), вопрос (для которого я прошу помощи) состоит в том, как можно, начинающий хакеллер, узнать лучший способ выбора правильных библиотек, правильной (сбалансированной) версии ghc, без удара в стену.
Я действительно потерян по этому поводу.
Действительно, большое спасибо за любое предложение.
С наилучшими пожеланиями.
2 ответа
Вот общий процесс, которому я следую, решая, какие пакеты использовать. Сначала я пытаюсь определить несколько пакетов, которые соответствуют моим потребностям. Затем я более внимательно смотрю на каждую упаковку, чтобы попытаться определить, какие из них являются лучшими для меня, согласно критериям, перечисленным ниже.
Обычно лучше использовать пакеты, которые в настоящее время поддерживаются. Чтобы определить, поддерживается ли пакет в данный момент, я проверяю ссылку "Дата загрузки" на странице описания пакета. (Конечно, есть некоторые старые проверенные пакеты, которые не были изменены в течение веков, потому что они не нуждаются в модификации.)
Обычно лучше использовать зрелые пакеты, поэтому я проверяю номер версии на странице описания пакета. Пакет с номером версии 7.3.5, вероятно, более зрелый, чем пакет версии 0.1.
Обычно лучше использовать хорошо документированные пакеты. Иногда есть хороший пример того, как использовать пакет в документации Haddock (yay!). Я также проверю ссылку "Домашняя страница" на странице описания пакета, потому что часто там будет больше документации.
Обычно лучше использовать популярные пакеты, потому что любые проблемы, вероятно, будут решены быстро, и другие пользователи могут ответить на вопросы. Я обычно делаю поиск в Google и вижу, какие пакеты чаще всего упоминаются в списках рассылки Haskell и Stackru.
Обычно лучше использовать пакеты, которые не требуют большого количества пакетов, которых у меня еще нет, поэтому я проверяю раздел "Зависимости" на странице описания пакета.
Я склонен следовать этой процедуре при выборе пакета для любого языка программирования, а не только для Haskell.
Документация для compact-string
говорит: "Этот пакет устарел. Используйте text
вместо.".
Документация для text
говорит: "Чтобы использовать расширенное и очень богатое семейство функций для работы с текстом Unicode (включая нормализацию, регулярные выражения, нестандартные кодировки, разбиение текста и локали), см. text-icu
пакет. ".
Документация для text-icu
показывает, что он успешно построен на GHC 7.4 и поддерживает нормализацию Unicode.