Функциональные объекты, функторы и монады в JavaScript
Функциональное программирование от А до Я. ФП на JS. Монады, функторы, каррирование, композиция...
Монада - простое объяснение
Функторы и монады. Функциональное программирование. Часть 2 | Лекция...
Виталий Брагилевский — Монады - не приговор
Лекция 03-3. Функторы.
Всем монадам, моноидам и функторам посвящается
Аппликативные функторы (extra)
Что такое МОНАДЫ
Functor или Объект-Функция
Введение в ИТ. Функторы и лямбда-функии
Монады. Экспликация
MoscowJS 56 — Монады, или зачем программисту математика — Александр Князев...
Монады - Иван Гришаев
Как функциональное программирование портит программистов на JavaScript...
Java. Разбираемся с монадами.
Функциональное программирование во фронтенде: лямбда-исчисление и JS, монады, Elm, Fantasy Land...
Functor в python - идеи из haskell
Haskell для начинающих - #136 урок. Интерфейс для монады State
Немного про монады и Ramda.js
[C++] Функторы и предикаты
A Functor in Functional Programming
Лекция 05. Аппликативные функторы.
Смотрим вместе YT: Ulbi - Функциональное программирование от А до Я. ФП на JS....
Комментарии
00:00:00 Определение функтора
00:01:40 Функтор из прототипа
00:08:17 Функтор из прототипа (упрощенный)
00:09:14 Функтор из замыкания
00:11:49 Функтор из замыкания с тернарным оператором
00:12:44 Аппликативный функтор из прототипа
00:18:08 Аппликативный функтор из замыкания (монада)
00:23:11 Пример применения монады
00:28:37 Функциональный объект
00:39:44 Пример применения функционального объекта
00:45:27 Обобщение
anatolykobzisty
Лучшее объяснение с примерами функторов и монад для реального применения в JS, а не голая теория из математики, чтобы потом голову сломать где, как и зачем это применять. У вас классные уроки !
avikbox
немного не хватает определений. Функтор - это, Аппликативный функтор это. Приходится свойства паттерна извлекать из реализации, рискуя спутать конкретную реализацию и сам концепт.
romanmakarov
Спасибо!
Интересно мозги потренировать...
Я пока не написал упрощенную функцию для считывания параметра из конфинга, не мог понять, как ваша монада работает (примерно 28 минута).
Вот моя функция, которая не монада, но делает тоже.
Может кому-то поможет лучше понять про монады:
const fp = obj => txt => txt.split('.').reduce((prev, key) => (prev[key]), obj);
ultexplorer
12 к просмотров и так мало лайков! Жадюги!
mazy
14:14 -- такое опредление map категорически не соответствует требованию функтора. Нельзя превентить повторную запаковку после мапа. Я понимаю, что это попытка сделать рабочим apply. Но строго говоря, это нарушает требование:
F(x).map(f) => F(f(x)).
А вот в конструкторе такое сделать ... -- вроде, как должно получится.
dimitro.cardellini
Хм, неплохо, или я за год поумнел или лекции стали неплохо так подробными.
dimanadko
Пример "7-path.js".
Императивный код хорошо отрабатывает, если мы не найдем нужный код, ничего не валится с ошибками.
А вот функциональный код не работает при передаче неверного пути или если в объекте не будет нужного ключа. Я даже специально попробовал запустить именно ваш код, в надежде, что я ошибся, но нет) И в итоге, получается пример бессмысленный) Еще и с учетом того, что проверку ключей можно чейнить, по принципу:
{}
alexandrmerser
В последнем примере с коллектором данных после вызова `collector.callback` нужно устанавливать `collector.finished = true`?
drmonochromer
28:08 не понятно где это условие, при котором "вычисления дальше не пойдут", ведь при отсутствии поля по ключу, мы возвращаем пустой объекти и делаем следующий шаг редьюса, т.о. редьюс пробежит по всем распарсенным ключам, только каждый раз будет возвращаться пустой объект и попытка взять у него поле. Не понятен этот момент(
sergey
28:38 -- кое-что важное потерялось )
function Counter() {}
Counter.prototype = Object.create(Function); // a то у нас перестанут работать apply, bind, и call.
dimitro.cardellini
Интересно а вы сами где все это учили?)
ilnurryazhapov
Отличный обзор.
Вот ссылка на алгебраические структуры: монады, функторы и кучу другого )
dimitro.cardellini
А зачем примешивать в map методы ap и chain в функциональном стиле? Ведь на прототипах не было примеси только отдельные методы
РоманВоловик-зд
Есть ли ссылка на список прикладных задач по данной теме?
pavelgnedoy
Зачем усложнять жизнь, добавляя всякие ненужные монады и функторы?
AkkayHT
По моему не особо правильно показывать монады и функторы в js...
Это не функциональное мышление...
Мы думаем что делает объект, а не что мы делаем с алгебраическим типом данных...
Проблема в том, что слушатель незнакомый с хаскеллем может подумать, что функторы и монады это контейнеры, что является грубейшей ошибкой...
Это скорее видео для тех, кто хочет реализовать монады и функторы в js, а не для тех, кто с ними не знаком...
П.с.
Ничего не имею против видео, отличный урок...
Хотя, тут вопрос спорный ибо функторы и монады понятия не из haskell, а из теории категорий, и как их лучше перевести в программирование, это уже субъективщина....
mechmaker
~19 минута --> 6-closure-ap.js --> // Usage --> 2й fp.maybe это просто ... совсем не понятно !
ИванПетров-бвщ
Мне интересно ваши студенты понимают материал сразу же на паре? Я изучаю js примерно год и не посидев над таким кодом минут 20 я ничего не пойму из этого. Не вижу большого смысла, так усложнять код (функторами и монадами), если это все можно также сделать и императивным путем, но это не будет выглядеть так же пафосно. Читаемость кода сильно падает, если тоже самое написать на условном ООП. Конечно, если это придумывали умные дядьки, значит им видней что истинна, а кто я такой? Я же обычный смертный, которому критиковать такой священный код не по силам.