Здравствуйте, Voivoid, Вы писали:
V>Кстати да, с range v3 можно писать почти как на haskell
V>V>auto triples = ints(1) >>= [ ](int z) { return
V> ints(1, z+1) >>= [=](int x) { return
V> ints(x, z+1) >>= [=](int y) { return
V> yield_if(x*x + y*y == z*z, std::make_tuple(x, y, z)); };}; };
V>
V>do-нотации только для полного счастья не хватает
Во! Время от времени подумываю одну штуку свою перенести на C++. Там будут монады и стрелки через шаблоны. Прототип есть, и есть работающий аналогичный код на Rust.
Как думаете, плюсисты заклюют? Обещаю в документации никого не травмировать и ни слова не писать о страшных монадах и стрелках!
Я вон в C++20 увидел незаконченную монаду в future::then. Подозреваю, что она не закончена по той простой причине, что в C++ нет полноценных значений у типа void. Из-за чего возникли бы нестыковки при использовании, будь там полноценная монадическая связка, но это мое личное предположение.