Re[4]: Монады и STL
От: Dusty Россия  
Дата: 19.07.07 05:45
Оценка:
Здравствуйте, lomeo, Вы писали:

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


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


L>Схожесть — да, наверное, есть. Но, мне кажется, это не монада.


Если бы ostream после вывода туда char становился бы ostream<char>, после вывода int — ostream<int>, а после вывода CSomeClass — ostream<CSomeClass> (т.е. если бы тип фозвращаемого результата определялся бы типом параметра последнего вызова) — то это была бы монада. А так мы имеем результат применения монады к char (не забудем, что монада — это конструктор типов). Примерный эквивалент ostream на Хаскеле будет такой:
  type Ostream a = WriterT [a] IO ()

а отнюдь не
  type Ostream a = IO а

Приведенная первой конструкция вполне себе может использваться в Хаскелевских EDSL, и она сделана на монадах — но она не монада.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.