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. А вот является ли это монадой — .
Схожесть — да, наверное, есть. Но, мне кажется, это не монада.