×
Traktatov.net » Изучай Haskell во имя добра! » Читать онлайн
Страница 245 из 245 Настройки

>ghci> let coolTree = Node 1 Empty (Node 3 Empty Empty)

>ghci> return (coolTree, []) >>= goRight

>Just (Node 3 Empty Empty,[RightCrumb 1 Empty])

>ghci> return (coolTree, []) >>= goRight >>= goRight

>Just (Empty,[RightCrumb 3 Empty,RightCrumb 1 Empty])

>ghci> return (coolTree, []) >>= goRight >>= goRight >>= goRight

>Nothing

Мы использовали функцию >return, чтобы поместить застёжку в конструктор >Just, а затем прибегли к оператору >>>=, чтобы передать это дело нашей функции >goRight. Сначала мы создали дерево, которое в своей левой части имеет пустое поддерево, а в правой – узел, имеющий два пустых поддерева. Когда мы пытаемся пойти вправо один раз, результатом становится успех, потому что операция имеет смысл. Пойти вправо во второй раз – тоже нормально. В итоге мы получаем фокус на пустом поддереве. Но идти вправо третий раз не имеет смысла: мы не можем пойти вправо от пустого поддерева! Поэтому результат – >Nothing.

Теперь мы снабдили наши деревья «сеткой безопасности», которая поймает нас, если мы свалимся. (Ух ты, хорошую метафору я подобрал.)

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

Благодарю за то, что прочитали!

…Или, по крайней мере, пролистали до последней страницы! Я надеюсь, вы нашли эту книгу полезной и весёлой. Я постарался дать вам хорошее понимание языка Haskell и его идиом. Хотя при изучении этого языка всегда открывается что-то новое, вы теперь сможете писать классный код, а также читать и понимать код других людей. Так что скорее приступайте к делу! Увидимся в мире программирования!