20

Занятия с напарниками по Haskell (4)

Добрый день. Продолжаю делиться наблюдениями из нашей группы по изучению Haskell (

часть 1, часть 2, часть 3 ). Воскресенье, дел мало. Можно посидеть и посочинять что-то, или рассказать. Тем более давно была предыдущая часть.

(Оффтоп) Прикольно. Только что узнал, что абзацы в тексте в редакторе пикабу можно разделять не только через "enter", но и через специальную кнопку "текст". Подобные блоки текста можно перетаскивать в режиме drag-and-drop.

Занятия у нас продолжаются. Был небольшой перерыв в 2 недели. Один из участников был в отпуске. Он хорошо отдохнул. Природа, свежий воздух, все дела. Вернулся, и все стало по прежнему, но хотя бы не так душно (шутка). 4 занятия в неделю. Читаем книгу, общаемся, решаем задачки.

И начитали мы уже 300 страниц. Из 1200. Достижение =). Да, пусть еще не монады. Но и не сказать , что идем на расслабоне. Книжка хитрая. Идеально держит баланс между "легко заскучать" и "трудно, что легче забросить". За это ей большой респект. Ради интереса попробовал почитать знаменитую "Изучай хаскель во имя добра" - ну не то. Даже несмотря на перевод, картинки, красивое оформление - путь изучения идет через спотыкания. Но это лично мое мнение. Не надо делать на этом глобальные выводы =)

Проходили недавно рекурсию. Ох и злобная тема. Вроде логика простая. Задал базовое условие, и вызываешь фукнцию внутри определения другой. Но как пошли задачки с "переподвыпертами"  - так сразу надо думать. Дополнительные вспомогательные функции писать, совмещать их по типам. Зато сразу научился различать одинарные и двойные кавычки. В одинарных кавычках тип данных - Char, в двойных - [Char], то есть String. Просто на этом моменте чаще всего не сходились типы в задачках на рекурсию.

Сейчас изучаем списки. Забавно автор их подает. Через такие термины как "cons cell" и "spine". Знакомит с основами ленивых вычислений haskell. Например, length списка будет вычислять только хребет списка (spine), не заботясь о том, что лежит в ячейках (cons cell) самого списка. Не заботясь - значит не вычисляя выражение, оставляя его в виде thunk. А само выражение, допускающее внутри себя thunk-и, находится в weak head normal form

( https://wiki.haskell.org/Weak_head_normal_form ). Читатель скажет: "фигня какая-то". А это только введение =)

Ладно уж. Учимся и страдаем. Страдаем и учимся. Хорошо, что все-таки вместе, в группе. Потому что в одиночку неприязнь к подобным вещам наступает быстро. А так, не хочется сильно тупить на созвоне - так даже иногда заранее читаешь наперед.

Прикол даже появился. Как-то попалась нам задачка вычислить 10-милионный палиндром на целых числах. Не спрашивайте, откуда задачка взялась. Кто-то пришел, ноги с улицы не вытер, и занес нам это. Так эта задачка сильно раззадорила участника нашей группы. И чтобы её решить - он походу наперед весь хаскель уже выучил. И оптимизации, и массивы, и фиг еще знает что. А я что - а я дождусь, когда он её решит, и я поинтересуюсь решением. Да, такой вот я нахлебник в этом вопросе =)

Автор упомянул функторы вскользь. Ах. Прям запахло приближением монад. Пока не совсем понятно. Абстракция над преобразованием абстрактного структурированного типа. Знакомиться подробно будем позже. Но радует, что я все ближе и ближе к своей цели по пониманию монад.

Вот такие дела. Пора выводы делать. А они простые. Хорошо, что с пользой трачу время своего сна на haskell, хоть это и не всегда приятно по ощущениям. Радует, что что-то остается в голове. Стремлюсь к большему. Чего и вам, читатели, желаю =)

Лига программистов

2.1K поста11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

1
Автор поста оценил этот комментарий

Да, есть такая ниша - разрабатывать на низкоуровневых языках по-функциональному.


А что, для TS как-то помогает именно Хаскель? Я думал, это JS с типами, а статическая типизация есть везде, от Паскакаля до почти всего современного мейнстрима.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Тому, кто учит JS, слово "типизация" очень непривычно. По крайней мере мне, а в целом тем, кто не сталкивался в своей жизни ни разу со статической типизацией. И вот чтобы осознать, что такое тип, какую роль он играет в формировании кода, как не выстрелить при этом себе в ногу. как эффективно использовать предоставляемые возможности  - вот тут нужна какая-то базовая теория типов.


Это только кажется, что расставь String, Bool...  у переменных \ свойств - и будешь в шоколаде. В более серьезных задачах надо не просто использовать типы, а уметь на них программировать. Да, именно программировать, как в других языках программирования.


Дженерики, расширить \ сузить тип, циклом обработать, ключ вытащить, условные гарды написать. И вот тут мозг ломается. Потому что программировать на конкретных значениях переменных - это одно, а на множествах значений и допустимых на них операциях - другое.


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


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

показать ответы
1
Автор поста оценил этот комментарий

А зачем вообще вся эта затея? Вы где-то нашли вакансии, где до хрена платят, или там проект не сводится к реализации типовой опердени, которую пофиг на чём делать?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У каждого участника группы свои мотивы.


В моем случае, я изучаю фронтенд. А там надо следовать современным трендам и владеть TypeScript. Пытался я его тыкать и так, и сяк, и эдак. Не поддается нормально. Стал думать, что же делать.... И решением стало то, что сначала лучше узнать систему типизации в другом языке, который под это дело заточен. А потом уже с готовой базой разметать TypeScript в клочья. Заодно всегда мечтал узнать про монады.


Другой участник учит Haskell, потому что это открывает новые перспективы \ горизонты на его текущей работе.


Третий участник также в этом заинтересован. И плюс хорошая компания - отличный стимул. Почему бы нет.


В итоге пусть это сейчас денег не принесет, но вот мозг прокачает, мировоззрение в IT расширит. Получается польза.

показать ответы
0
Автор поста оценил этот комментарий
На какой странице сейчас?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Группа развалилась в конце прошлого года. Прошли что-то около 300-400 страниц (из 1300). Ни о чем не жалеем. Так как проходили на совесть, то знания записаны в подкорку, и их легко восстановить, когда появится желание возобновить изучение Haskell.

Пока вернулся к изучения Frontend. Надо TS доизучать. И сделать рывок в React.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества