На Хабре много статей по монады с примерами для Haskell (http://habrahabr.ru/post/183150, http://habrahabr.ru/post/127556), но не так много статей, которые описывают, что такое монады с примерами на Scala. По сколько большинство разработчиков на Scala пришли из мира объектно ориентированного программирования, то для них, по началу, сложно понять что такое монады и для чего они нужны, эта статья как раз для таких разработчиков. В этой статье я хочу показать, что это такое и навести примеры использования монады Option, в следующих статьях будут описаны монады Try и Future.
Читать полностью »
Рубрика «монады» - 3
Монады в Scala
2014-01-18 в 9:03, admin, рубрики: scala, монады, функциональное программирование, метки: scala, монадыКлассы типов на C++
2013-12-10 в 8:58, admin, рубрики: c++, haskell, scala, монады, ненормальное программирование, метки: c++, haskell, scala, монады 
Уже было описано как реализовать монады на C++ без классов типов. Я же хочу показать, как можно реализовать классы типов, использую в качестве примера монады.
Этот прием широко применяется в языке Scala, но может быть использован и в C++. Кратко я его описал в качестве иллюстрации трудностей унифицированного описания библиотек, сейчас же продемонстрирую его реализацию.
Нужно отметить что классы типов применяются не только в декларативных языках, как Haskell и Mercurry, но о нашли свое отражение в достаточно классических Go и Rust.
Этот прием так же подходит для реализации мультиметодов из Common Lisp и Clojure.
C++ я не брал в руки уже лет шесть, так что код может быть не идеоматичным и не использовать новые (полезные) фичи.
Кроме того, я полностью игнорирую проблему управления памятью — практикующие C++ справятся с этим лучше меня.
Работоспособность кода проверялась на gcc 4.7.3.
Кооперативные потоки с нуля в 33 линии на Хаскеле
2013-10-09 в 6:04, admin, рубрики: haskell, monad transformer, threads, yield, монады, потоки, Совершенный код, функциональное программирование Хаскель отличает себя от большинства функциональных языков тем, что имеет глубокие культурные корни из области математики и информатики, которые дают обманчивое впечатление, что Хаскель плохо подходит для решения практических задач. Однако, чем больше вы знаете Хаскель, тем больше вы цените то, что теория часто является наиболее практическим решением многих общих проблем программирования. Этой статьёй хочется подчеркнуть эту точку зрения тем, что мы смешаем имеющиеся в наличии теоретические основы и создадим чистую пользовательскую систему потоков.

Читать полностью »
Тройка полезных монад
2013-07-02 в 5:17, admin, рубрики: haskell, monads, reader, state, writer, монады, переводы, функциональное программированиеВнимание: перед тем как читать текст ниже, вы уже должны иметь представление о том, что такое монады. Если это не так, то прежде прочитайте вот этот пост!
Перед нами функция half:

И мы можем применить её несколько раз:
half . half $ 8
=> 2
Всё работает как и ожидалось. Но вот вы решили, что хорошо бы иметь лог того, что происходит с этой функцией:

half x = (x `div` 2, "Я только что располовинил " ++ (show x) ++ "!")
Что ж, отлично. Но что будет если вы теперь захотите применить half несколько раз?
half . half $ 8
Вот то, что мы хотели бы, чтобы происходило:

Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
finalValue = (val2, log1 ++ log2)
where (val1, log1) = half 8
(val2, log2) = half val1
Фу! Это ни капли не похоже на лаконичное
half . half $ 8
А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
Читать полностью »
Функторы, аппликативные функторы и монады в картинках
2013-06-13 в 6:41, admin, рубрики: applicatives, functors, haskell, monads, монады, переводы, функциональное программирование Вот некое простое значение:

И мы знаем, как к нему можно применить функцию:

Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:

Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных Maybe определяет два связанных контекста:

data Maybe a = Nothing | Just a
Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
Читать полностью »
Через тернии к Haskell. 2/2
2012-10-03 в 14:53, admin, рубрики: haskell, вынос мозга, монады, Программирование, функциональное программирование, метки: haskell, вынос мозга, монады, функциональное программирование 
Вторая часть короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь
Через тернии к Haskel (перевод). 2/2
2012-10-03 в 14:53, admin, рубрики: haskell, вынос мозга, монады, переводы, Программирование, функциональное программирование, метки: haskell, вынос мозга, монады, функциональное программирование -2-2.jpg)
Вторая часть ПЕРЕВОДА короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь
Оригинал здесь
Через тернии к Haskell (перевод). 2/2
2012-10-03 в 14:53, admin, рубрики: haskell, вынос мозга, монады, переводы, Программирование, функциональное программирование, метки: haskell, вынос мозга, монады, функциональное программирование -2-2.jpg)
Вторая часть ПЕРЕВОДА короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь
Оригинал здесь
JavaScript / Путь асинхронного самурая
2012-02-23 в 21:38, admin, рубрики: async pattern, javascript, monads, асинхронное программирование, монады, метки: async pattern, javascript, monads, асинхронное программирование, монадыJavaScript — очень необычный язык. Может это звучит немного странно, но по-моему в его истории есть некоторое сходство с судьбой японского языка. Он, возможно, не был изначально глубоко продуман и был сделан на скорую руку, но при этом в умелых руках он часто оказывается неожиданно элегантным. Он был “поскрёбан” по различной степени качества сусекам, но при этом он легко впитывает нововведения и иногда даже кажется, что только для них и был создан. Он покорно принимает различные стили письма и, если бы не апологеты, “правильное” написание было бы, возможно, уже забыто… И, самое главное, как и для японского, нет обозримой границы в познании этогоЧитать полностью »
Python / [Из песочницы] Для тех, кто хочет странного: монады в Python
2012-02-20 в 9:48, admin, рубрики: maybe, python, монады, метки: maybe, python, монады Доброго времени суток!
Недавно, начав изучать Haskell, несколько раз пытался подступиться к монадам, но всё никик не мог, что назывется, нить ухватить (м.б. дело в нехватке базовых знаний). Помогла замечательная книга Learn you a Haskell for great Good.
Начитался, проникся, решил донести до коллег/друзей. Разрабатываем на Python, казалось бы, незачем сильно вникать во «всю эту функциональщину», по крайней мере дальше filter/map/reduce. Но расширение кругозора, штука, бесспорно, полезная, поэтому я решил реализовать пару монад на Python, да так чтобы это не вылилось в полный unpythonic. Конечно же, не я первый и не я последний, было и есть несколько реализаций монад наЧитать полностью »
