Короче, в TEA часто такой паттерн есть – в ответ на Msg A нужно дозапросить данные (например, из SharedPreferences). Как обычно это решается – кидаешь Effect(Cmd) и в ответ ждёшь Msg B, и уже когда он пришёл, достаёшь из него данные и компьютишь свою логику
Coeffect – это способ избежать этой нудятины. Ты в ответ на Msg A бросаешь Coeffect<R>, и функцию (R) -> State, Effect. И коэффект сначала выполняется, а потом вызывает твою функцию и ты в шоколаде
так, а в чём вообще смысл? чем это лучше колбека на событие с логикой, или банального опроса канала сообщений с простым линейным кодом типа:
msg = ch.receive()
processMsg(msg)