В этом случае проблема заключается в том, что конструктор 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 года, поэтому обидно, что есть еще много кода, который не работает с новой версией из-за этого.К счастью, это просто.