Re[3]: Монады и STL
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 18.07.07 19:57
Оценка:
L>>(Вообще монада -- это функтор с двумя морфизмами — unit :: X -> M X, join :: M (M X) -> M X, где X — это любой объект категории С, над которой определён функтор M).

DC>Погоди, что есть морфизм, а то я не пойму о чем ты говоришь.


Я говорю о том, что понятие "монада" имеет чёткое математическое определение в теории категорий. Следовательно, если случай подпадает под это определение, значит это монада, иначе нет. Грубо говоря, если любой тип можно завернуть в наш, и если из дважды завернутого в наш тип можно сделать единожды, то это монада. Это очень примитивно, на самом деле там ещё несколько условий, но это те, по которым обычно можно сориентироваться.

L>>В случае ostream что есть join?


DC>Что я увидел, так это "неявное" протаскивание параметра по цепочке.


Покажи. Я пока не догнал, о чём ты. У манипуляторов тип не похож на bind, IMHO. Ты не об этом?

DC>Тут еще такое дело получается что если operator << () параметризовать функтором char->stream<char>, то его реализацию можно будет менять для всех типов. Т.е. это что-то типа перегрузки оператора последовательности.


DC>Просто я в монады только въезжаю, но тут я вижу схожесть того что получаем с помощью монад с тем что сделано в STL. А вот является ли это монадой — .


Схожесть — да, наверное, есть. Но, мне кажется, это не монада.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.