примеры на Haskell часто не работают - PullRequest
4 голосов
/ 26 января 2012

Я новичок в haskell и использую последнюю версию GHCi 2011.2.0.1.Одно разочарование, с которым я часто сталкиваюсь, это то, что очень часто примеры в интернете и книгах (даже с официального сайта haskell.org, например, пример 2 из http://www.haskell.org/haskellwiki/State_Monad) не компилируются. И это занимает несколько раундов охоты ипубликация вопросов, чтобы выяснить, в чем проблема. Даже некоторые примеры из книги RWH не работают.

Это проблема с новой версией haskell или платформы haskell?развитие и нестабильность, или только примеры устарели? В любом случае, каков наилучший способ для нового ученика найти правильные примеры для изучения?

В частности, вы можете помочь исправить упомянутый пример монады состояния, упомянутыйвыше

1 Ответ

9 голосов
/ 26 января 2012

В этом случае проблема заключается в том, что конструктор State был удален в последней версии библиотеки Monad Transformer.Если вы замените использование State в определении getNext на state, то программа работает просто отлично.(Это потому, что State был переопределен как StateT Identity, то есть преобразователь монады состояния через монаду идентификации, и поэтому отдельный тип данных был удален. Если вы не знаете, что это значит, не беспокойтесь оэто; это просто означает, что вы должны заменить State на state всякий раз, когда вы его видите.)

Большинство проблем с существующими примерами в Интернете или в RWH просто связаны с новыми версиями библиотек,(Я думаю, что основная проблема с примерами RWH заключается в том, что примеры Parsec написаны для Parsec 2; Parsec 3 изменился совсем немного, поэтому, по крайней мере, вам, вероятно, потребуется добавить некоторые операции импорта.)

InВ целом, Haskell страдает от недостатка современных полезных ресурсов;эта страница на HaskellWiki, кажется, просто не поддерживается.(Хотя HaskellWiki действительно является официальным сайтом haskell.org, страницы пишутся и поддерживаются пользователями, так как то, что что-то есть в вики, не обязательно означает, что оно современное или высокое качество.)

Выпуск Monad Transformer Library, который удалил State, был выпущен в октябре 2010 года, поэтому обидно, что есть еще много кода, который не работает с новой версией из-за этого.К счастью, это просто.

...