менее общно чем иметь кастомизируемое cps
например
do! {
let x <- None;
1
}
то есть если бы оно было, то в принципе, можно было ни ?, ни асинкавайт, ни try, не реализовывать, оно всё выражалось бы через do
разница в том, что монадическое do не может во вложенные выражения, например когда ? или await или yield находится где-то внутри foo(..., x?)
проблема монад, что они стейтлес (попробуй написать инстанс монады для итератора аналогичный инстансу монады для списка из хаскеля), а у нас тут императивный язык
почему не может?
Обсуждают сегодня