Миран Липовача - Изучай Haskell во имя добра!

Тут можно читать онлайн Миран Липовача - Изучай Haskell во имя добра! - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство ДМК Пресс, год 2012. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Изучай Haskell во имя добра!
  • Автор:
  • Жанр:
  • Издательство:
    ДМК Пресс
  • Год:
    2012
  • Город:
    Москва
  • ISBN:
    978-5-94074-749-9
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Миран Липовача - Изучай Haskell во имя добра! краткое содержание

Изучай Haskell во имя добра! - описание и краткое содержание, автор Миран Липовача, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
На взгляд автора, сущность программирования заключается в решении проблем. Программист всегда думает о проблеме и возможных решениях – либо пишет код для выражения этих решений.
Язык Haskell имеет множество впечатляющих возможностей, но главное его свойство в том, что меняется не только способ написания кода, но и сам способ размышления о проблемах и возможных решениях. Этим Haskell действительно отличается от большинства языков программирования. С его помощью мир можно представить и описать нестандартным образом. И поскольку Haskell предлагает совершенно новые способы размышления о проблемах, изучение этого языка может изменить и стиль программирования на всех прочих.
Ещё одно необычное свойство Haskell состоит в том, что в этом языке придаётся особое значение рассуждениям о типах данных. Как следствие, вы помещаете больше внимания и меньше кода в ваши программы.
Вне зависимости от того, в каком направлении вы намерены двигаться, путешествуя в мире программирования, небольшой заход в страну Haskell себя оправдает. А если вы решите там остаться, то наверняка найдёте чем заняться и чему поучиться!
Эта книга поможет многим читателям найти свой путь к Haskell.
Отображения, монады, моноиды и другое! Всё сказано в названии: «Изучай Хаскель во имя добра!» – весёлый иллюстрированный самоучитель по этому сложному функциональному языку.
С помощью оригинальных рисунков автора, отсылке к поп-культуре, и, самое главное, благодаря полезным примерам кода, эта книга обучает основам функционального программирования так, как вы никогда не смогли бы себе представить.
Вы начнете изучение с простого материала: основы синтаксиса, рекурсия, типы и классы типов. Затем, когда вы преуспеете в основах, начнется настоящий мастер-класс от профессионала: вы изучите, как использовать аппликативные функторы, монады, застежки, и другие легендарные конструкции Хаскеля, о которых вы читали только в сказках.
Продираясь сквозь образные (и порой безумные) примеры автора, вы научитесь:
• Смеяться в лицо побочным эффектам, поскольку вы овладеете техниками чистого функционального программирования.
• Использовать волшебство «ленивости» Хаскеля для игры с бесконечными наборами данных.
• Организовывать свои программы, создавая собственные типы, классы типов и модули.
• Использовать элегантную систему ввода-вывода Хаскеля, чтобы делиться гениальностью ваших программ с окружающим миром.
Нет лучшего способа изучить этот мощный язык, чем чтение «Изучай Хаскель во имя добра!», кроме, разве что, поедания мозга его создателей. Миран Липовача (Miran Lipovača) изучает информатику в Любляне (Словения). Помимо его любви к Хаскелю, ему нравится заниматься боксом, играть на бас-гитаре и, конечно же, рисовать. У него есть увлечение танцующими скелетами и числом 71, а когда он проходит через автоматические двери, он притворяется, что на самом деле открывает их силой своей мысли.

Изучай Haskell во имя добра! - читать онлайн бесплатно ознакомительный отрывок

Изучай Haskell во имя добра! - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Миран Липовача
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

threeCoins = do

a <���– randomSt

b <���– randomSt

c <���– randomSt

return (a, b, c)

Функция threeCoins– это теперь вычисление с состоянием, и после получения исходного генератора случайных чисел она передаёт этот генератор в первый вызов функции randomSt, которая производит число и новый генератор, передаваемый следующей функции, и т. д. Мы используем выражение return (a, b, c), чтобы представить значение (a, b, c)как результат, не изменяя самый последний генератор. Давайте попробуем:

ghci> runState threeCoins (mkStdGen 33)

((True,False,True),680029187 2103410263)

Теперь выполнение всего, что требует сохранения некоторого состояния в промежутках между шагами, в самом деле стало доставлять значительно меньше хлопот!

Свет мой, Error, скажи, да всю правду доложи

К этому времени вы знаете, что монада Maybeиспользуется, чтобы добавить к значениям контекст возможной неудачи. Значением может быть Just < нечто >либо Nothing. Как бы это ни было полезно, всё, что нам известно, когда у нас есть значение Nothing, – это состоявшийся факт некоей неудачи: туда не втиснуть больше информации, сообщающей нам, что именно произошло.

И тип Either e aпозволяет нам включать контекст возможной неудачи в наши значения. С его помощью тоже можно прикреплять значения к неудаче, чтобы они могли описать, что именно пошло не так, либо предоставить другую полезную информацию относительно ошибки. Значение типа Either e aможет быть либо значением Right(правильный ответ и успех) либо значением Left(неудача). Вот пример:

ghci> :t Right 4

Right 4 :: (Num t) => Either a t

ghci> :t Left "ошибка нехватки сыра"

Left "ошибка нехватки сыра" :: Either [Char] b

Это практически всего лишь улучшенный тип Maybe, поэтому имеет смысл, чтобы он был монадой. Он может рассматриваться и как значение с добавленным контекстом возможной неудачи, только теперь при возникновении ошибки также имеется прикреплённое значение.

Его экземпляр класса Monadпохож на экземпляр для типа Maybeи может быть обнаружен в модуле Control.Monad.Error [15] Если версия пакетов языка Haskell base и mtl , установленных в вашей системе, выше соответственно 4.3.1.0 и 2.0.1.0, вам нужно импортировать модуль Control.Monad.Error в ваш скрипт или Control.Monad.Instances в интерпретатор GHCi, перед тем как вы сможете использовать функции экземпляра класса Monad для типа Either . Это связано с тем, что в этих версиях пакетов объявления экземпляров были перенесены в модуль Control.Monad.Instances . – Прим. перев. :

instance (Error e) => Monad (Either e) where

return x = Right x

Right x >>= f = f x

Left err >>= f = Left err

fail msg = Left (strMsg msg)

Функция return, как и всегда, принимает значение и помещает его в минимальный контекст по умолчанию. Она оборачивает наше значение в конструктор Right, потому что мы используем его для представления успешных вычислений, где присутствует результат. Это очень похоже на определение метода returnдля типа Maybe.

Оператор >>=проверяет два возможных случая: Leftи Right. В случае Rightк значению внутри него применяется функция f, подобно случаю Just, где к его содержимому просто применяется функция. В случае ошибки сохраняется значение Leftвместе с его содержимым, которое описывает неудачу.

Экземпляр класса Monadдля типа Either eимеет дополнительное требование. Тип значения, содержащегося в Left, – тот, что указан параметром типа e, – должен быть экземпляром класса Error. Класс Errorпредназначен для типов, значения которых могут действовать как сообщения об ошибках. Он определяет функцию strMsg, которая принимает ошибку в виде строки и возвращает такое значение. Хороший пример экземпляра Error– тип String! В случае со Stringфункция strMsgпросто возвращает строку, которую она получила:

ghci> :t strMsg

strMsg :: (Error a) => String –> a

ghci> strMsg "Бум!" :: String

"Бум!"

Но поскольку при использовании типа Eitherдля описания ошибки мы обычно задействуем тип String, нам не нужно об этом сильно беспокоиться. Когда сопоставление с образцом терпит неудачу в нотации do, то для оповещения об этой неудаче используется значение Left.

Вот несколько практических примеров:

ghci> Left "Бум" >>= \x –>return (x+1)

Left "Бум"

ghci> Left "Бум " >>= \x –> Left "нет пути!"

Left "Бум "

ghci> Right 100 >>= \x –> Left "нет пути!"

Left "нет пути!"

Когда мы используем операцию >>=, чтобы передать функции значение Left, функция игнорируется и возвращается идентичное значение Left. Когда мы передаём функции значение Right, функция применяется к тому, что находится внутри, но в данном случае эта функция всё равно произвела значение Left!

Использование монады Errorочень похоже на использование монады Maybe.

ПРИМЕЧАНИЕ.В предыдущей главе мы использовали монадические аспекты типа Maybeдля симуляции приземления птиц на балансировочный шест канатоходца. В качестве упражнения вы можете переписать код с использованием монады Error, чтобы, когда канатоходец поскальзывался и падал, вы запоминали, сколько птиц было на каждой стороне шеста в момент падения.

Некоторые полезные монадические функции

В этом разделе мы изучим несколько функций, которые работают с монадическими значениями либо возвращают монадические значения в качестве своих результатов (или и то, и другое!). Такие функции обычно называют монадическими . В то время как некоторые из них будут для вас совершенно новыми, другие являются монадическими аналогами функций, с которыми вы уже знакомы – например, filterи foldl. Ниже мы рассмотрим функции liftM, join, filterMи foldM.

liftM и компания Когда мы начали своё путешествие на верхушку Горы Монад мы - фото 102

liftM и компания

Когда мы начали своё путешествие на верхушку Горы Монад, мы сначала посмотрели на функторы , предназначенные для сущностей, которые можно отображать. Затем рассмотрели улучшенные функторы – аппликативные , которые позволяют нам применять обычные функции между несколькими аппликативными значениями, а также брать обычное значение и помещать его в некоторый контекст по умолчанию. Наконец, мы ввели монады как улучшенные аппликативные функторы, которые добавляют возможность тем или иным образом передавать эти значения с контекстом в обычные функции.

Итак, каждая монада – это аппликативный функтор, а каждый аппликативный функтор – это функтор. Класс типов Applicativeимеет такое ограничение класса, ввиду которого наш тип должен иметь экземпляр класса Functor, прежде чем мы сможем сделать для него экземпляр класса Applicative. Класс Monadдолжен иметь то же самое ограничение для класса Applicative, поскольку каждая монада является аппликативным функтором – однако не имеет, потому что класс типов Monadбыл введён в язык Haskell задолго до класса Applicative.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Миран Липовача читать все книги автора по порядку

Миран Липовача - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Изучай Haskell во имя добра! отзывы


Отзывы читателей о книге Изучай Haskell во имя добра!, автор: Миран Липовача. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x