апдейтер обязан быть монадичным, типа
someLogic = do
-- or takeLatest for resetting scenario state
a <- awaitAction Action1
try $ makeRequest
path1 . in . state .= a
b <- awaitAction Action2
path2 . in . state %= succ
все эти бизнес-скрипты запускаются параллельно. Там в основе те же автоматы (через них идут генераторы, которые уже служат основой для императивности), но монадичность позволяет делать сложные сценарии БЕЗ промежуточный стейтов (точнее они есть, но генерируются автоматически, мы их в коде не видим)
при этом промежуточные стейты в такой реализации все еще доступны (как и раньше, вручную), то есть это решение строго больше
редакс-саги в этом плане концептуально мне нравятся, не нравятся реализацией
на стримах с ду-нотацией наверняка тоже что-то делали подобное
в ангуляре ок идея в ngrx помимо чистых трансформаторов, есть еще эффекты