В главе 19 Real World Haskell многие примеры теперь терпят неудачу из-за изменения Control.Exception
.
Это заставляет меня думать, что, возможно, некоторые из материалов в этой книге на самом деле устарели и не стоит больше изучать, в конце концов, прошло уже 6 лет. Моя единственная другая ссылка - Learn You a Haskell For Great Good , хотя это отличная книга, она гораздо более проста по сравнению с RWH.
Может ли кто-нибудь, кто читал эту книгу раньше, дать совет, какие из ее частей больше не актуальны? Особенно главы во второй половине книги, например, программная транзакционная память, параллельное программирование, программирование сокетов и т. Д.
РЕДАКТИРОВАТЬ: Речь идет об издании книги, опубликованной в декабре 2008 г., которая является единственным известным изданием на сегодняшний день (ноябрь 2017 г.).
источник
Monad
являются подклассомApplicative
.Ответы:
Главный выпуск RWH
Это старый. RWH был написан во время использования версии 6.8 GHC. 6.8 использовала базовую версию 3.0.xx 6.10.1 уже использовала 4.0.0.0, которая внесла много изменений . И это просто скачок с 6,8 до 6,10. Текущая версия GHC - 7.10. Изменены монады. Там в настоящее время дискуссии , чтобы удалить
return
изMonad
, так чтоMonad
экземпляр в реальном мире Haskell действительно будет синхронизирован с реальным миром.Тем не менее, это все еще полезный ресурс для общих рекомендаций. Но учтите, что многие библиотеки изменились с момента его выпуска.
Во время чтения RWH вы можете прочитать «Что бы я хотел знать при изучении Haskell» Стивена Дила . Это дает дополнительную информацию, но имейте в виду, что некоторые разделы не совсем удобны для новичков.
Основные пометки
Замечания к главам
Это всего лишь краткий обзор некоторых вещей, которые я заметил, читая RWH. Наверное, неполный.
Глава 2. Типы и функции по сравнению с FTP
Начиная с GHC 7.10 .
Тип
null
был изменен в связи с предложением Foldable-Traversable-Proposal . Многие другие функции, такие какfoldr
,foldl
и многие другие, которые ранее были определены только[a]
вPrelude
, были заменены более общимиFoldable t => t a
вариантами.Глава 11. Тестирование и обеспечение качества
Начиная с Haskell-платформы 2010 или конца 2008 года.
Хотя об этом упоминается в сноске , библиотека QuickCheck во многом изменилась с версии 1 на версию 2. Например,
generate
теперь используетсяGen a
вместоStdGen
, а функциональность старойgenerate
находится вTest.QuickCheck.Gen.unGen
.В случае сомнений проверьте документацию .
Глава 14. Монады и Глава 15. Программирование с помощью монад.
Взлом кода:
Applicative m => Monad m
Начиная с GHC 7.10,
Applicative
это суперкласс тогоMonad
, чего не планировалось в 2007 году.См. Примечания к выпуску 7.8.1 .
В
State
/Writer
/Reader
монадыВ « Будет ли настоящая государственная монада», встаньте, пожалуйста? раздел, утверждают авторы
Это уже не так, потому что
State
и его друзья теперь реализованы черезИтак, они определены их преобразователем монад.
Глава 17. Взаимодействие с C: FFI
В целом глава хороша , но, как можно прочитать в комментариях или в блоге Юраса Шумовича , часть финализатора в следующем коде - плохая практика:
Поскольку
malloc()
следует использовать withfree()
,new
withdelete
,allocate
withdeallocate
, всегда следует использовать правильную функцию.Если внешняя функция выделяет память, вы также должны использовать соответствующую функцию освобождения.
Глава 19. Обработка ошибок
Обработка ошибок полностью изменилась с 6.8 на 6.10, но вы это уже заметили. Лучше прочтите документацию .
Глава 22. Расширенный пример: программирование веб-клиента
Некоторые примеры кажутся сломанными. Также доступны другие библиотеки HTTP.
Глава 25. Профилирование и оптимизация
Общие методы профилирования остались прежними, и пример (см. Ниже) является отличным примером проблем, которые могут возникнуть в вашей программе. Но в RWH отсутствует многопоточное профилирование, например, через ThreadScope. Кроме того, насколько мне известно, ленивый ввод-вывод не рассматривается на протяжении всей книги.
Глава 24 и Глава 28 (Параллельное и параллельное программирование и STM)
Хотя Глава 24. Параллельное и многоядерное программирование и Глава 28. Программная транзакционная память по-прежнему актуальны, книга Саймона Марлоу « Параллельное и параллельное программирование в Haskell» посвящена исключительно параллельному и параллельному программированию и вышла совсем недавно (2013 г.). Программирование и восстановление GPU полностью отсутствуют в RWH.
Глава 26. Расширенный дизайн библиотеки: создание фильтра Блума
Как и в случае с другими главами, общие руководящие принципы библиотеки дизайна по-прежнему хорошо написаны и актуальны. Однако из-за некоторых изменений (?)
ST
, Результат больше не может быть скомпилирован.Глава 27. Сетевое программирование
Он все еще в основном обновлен. В конце концов, сетевое программирование не так легко изменить. Однако в коде используются устаревшие функции
bindSocket
иsClose
, которые следует заменить наbind
иclose
(желательно через квалифицированный импорт). Имейте в виду, что он очень низкоуровневый, вы можете использовать более специализированную библиотеку высокого уровня.Приложение A. Установка библиотек GHC и Haskell
GHC 6.8 была последней версией до того, как была представлена платформа Haskell. Таким образом, в приложении говорится, что вам нужно получить GHC и Cabal вручную. Не надо. Вместо этого следуйте инструкциям на странице загрузки haskell.org .
Кроме того, в приложении не рассказывается о песочницах Cabal, которые были введены в Cabal 1.18 и избавляют вас от ада зависимости . И, конечно,
stack
отсутствует полностью.Отсутствующий контент
Некоторые темы вообще не обсуждаются в RWH. Это включает в себя потоковое библиотеки , такие как трубы и трубопровода , а также линзы .
Есть несколько ресурсов по этим темам, но вот несколько ссылок на вводные, чтобы дать вам представление, о чем они. Также, если вы хотите использовать векторы, используйте
vectors
пакет.Control.Applicative
RWH использует
Control.Applicative
's(<$>)
в нескольких местах, но ничего не объясняетControl.Applicative
. LYAH и Typeclassopedia содержат разделы поApplicative
. Учитывая, чтоApplicative
это суперклассMonad
(см. Выше), рекомендуется выучить этот класс наизусть.Кроме того, некоторые операторы
Control.Applicative
(и сам класс типов) теперь частьюPrelude
, поэтому убедитесь , что ваши операторы не сталкиваются с<$>
,<*>
и другие.Линзы
lens
)Потоковые библиотеки
conduit
)pipes
, входит вpipes
комплект)Инструменты
stack
, кроссплатформенная программа для разработки проектов на Haskellghc-mod
, бэкэнд для vim, emacs, Sublime Text и других редакторовНовые / отсутствующие языковые расширения и изменения GHC
:i ($)
сильно изменился)-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
источник