Прелюдия Или Как Полюбить Haskell

Добрый день, уважаемые хабровчане.

Всегда сложно начинать.

Трудно начать писать статью, сложно завязать отношения с человеком.

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

Примером такого языка является Haskell.



Почему вы не можете просто переключиться на Haskell?
«Вы все избалованы императивным стилем!» - вот что рассказал нам наш первый преподаватель функциональных языков, замечательный человек, ученый и организатор Сергей Михайлович Абрамов.

И он был прав.

Как сложно было забыть о переменных, присваиваниях, алгоритмах и начать мыслить функциями.

Вы можете сесть и написать программу на Haskell, без проблем.

Вы можете построить вложенный цикл, использовать переменные и присваивания, это легко! Но потом вы смотрите на свой код и говорите: «Кому нужен этот функционал? Да, я могу писать на C быстрее и лучше».

А все потому, что невозможно перенести императивный стиль программирования на функциональный язык.

Вы не можете заставить рыбу летать или птицу плавать.

Вы не можете быть уткой, которая не умеет плавать или летать.

В функции нужно погружаться с головой, их нужно чувствовать косточками.

Только так вы полюбите этот язык и не сможете писать ни на чем другом.

Но как, как это сделать?

Прочтите предисловие
Ответ прост. Всего два слова.

Прочтите предисловие! Если вы хотите понять и полюбить Haskell, если вы хотите изучить чистый функциональный стиль, прочтите Prelude. Prelude — это стандартная библиотека самых необходимых функций, определенная стандартом Haskell 98. Каждая линия, каждая точка выверена и отшлифована, ничего лишнего и обязательного там не обнаружено.

Читая прелюдию, испытываешь эмоции, сравнимые с эмоциями при чтении интересной фантастической книги.

Одна из моих любимых частей прелюдии — это раздел, где описывается работа со списками.

Возьмем, к примеру, функцию карты.

  
  
  
  
  
   

map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs

Помните — мы мыслим функциями.

Какова функция карты? На входе у нас есть некоторая функция из множества A в множество B и список элементов из множества A. На выходе мы должны получить список из множества B, применив функцию к каждому элементу списка.

Эта функция — отличный пример одного из основных приемов работы в Haskell — шаблонов.

Карта с входными параметрами вида a f [] (функция и пустой список) вернет пустой список.

В противном случае f будет применена к первому элементу списка, а полученный элемент будет добавлен (двоеточие) к списку, сформированному путем применения функции карты к хвосту списка.

Одним из главных преимуществ Haskell является то, что после того, как вы сформулировали функцию на математическом языке, ее программирование обычно занимает несколько минут.

Еще несколько примеров
И вот еще чудо: голова и хвост функционируют, ну просто загляденье!

head :: [a] -> a head (x:_) = x head [] = error "Prelude.head: empty list"



tail :: [a] -> [a] tail (_:xs) = xs tail [] = error "Prelude.tail: empty list"

Думаю, тут даже объяснять нечего.

Подчеркивание в шаблонах Haskell означает «что угодно».



null :: [a] -> Bool null [] = True null (_:_) = False

Неужели есть люди, которым это не нравится? А вот длина функции.



length :: [a] -> Int length [] = 0 length (_:l) = 1 + length l

Как класс Eq определен в прелюдии? Вы будете смеяться!

class Eq a where (==), (/=) :: a -> a -> Bool -- Minimal complete definition: -- (==) or (/=) x /= y = not (x == y) x == y = not (x /= y)

Неужели это головокружительная красота?

О чем я говорю?
У нас могло бы быть много примеров кода, но зачем портить вам удовольствие? Всем новичкам, всем, кто хочет влюбиться в Haskell, один совет — прочтите прелюдию.

Я читаю и пытаюсь писать как бы в прелюдии.

По крайней мере, я стремлюсь.

Читая прелюдию, я понял философию Haskell и влюбился в этот язык, чего и вам всем желаю! Извините за сумбурность, я наверное не писатель, очень плохо объяснил всё, что нужно, но мне очень хотелось поделиться с вами частичкой своей любви к Haskell и этим небольшим, но очень полезным советом.

Прочтите предисловие! Теги: #Функциональное программирование #haskell #haskell #Функциональное программирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.