Монады и STL
От: dr.Chaos Россия Украшения HandMade
Дата: 18.07.07 10:25
Оценка:
Навеяло вот этим
Автор: lomeo
Дата: 12.02.07
.

Вобщем смотрю я на монады и думаю, что все это, что-то мне напоминает.

Возьмем в С++ operator <<(). Он принимает basic_ostream и возвращает его только в обновленном состоянии, т.е. по сути это операция связывания, а вот действие которое связано спрятано в перегрузках оператора, т.е. по умолчанию это функция преобразования некоторого типа в поток байт. Есть там и действия которые передаются явно (манипуляторы потока). Можно кстати и вывод примерно так представить, но это будет выглядеть некрасиво

Таким образом, получается operator << и operator >> создают монадный интерфейс ввода/вывода в императивном языке.

Правда тип bind m a->(a->m b)->m b несколько не стыковывается, т.к а и б тут одинаковые, а operator<< принимает не поток, а другой тип. Хотя поток байт можно считать базовым для всех типов или точнее у каждого типа передаваемого в operator << есть преобразование в поток.

Если я ничего не напутал, получается что в имеперативных языках монады таки используются. Причем потоковый ввод/вывод одно из самых красивых, гибких и практичных решений в STL. Правда я сомневаюсь, что создатель знал про монады.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.