Шок, для того чтобы делать ио нужны монады
Ну в джаваскрипте их нет, например, так будет лучше?
Есть разница всё-таки между тем, чтобы IO был только на входе и выходе программы, и тем, чтобы тащить его через всю программу всё-таки. Ну то есть обычное RP легко описывается как тройка:
read :: Effect (Event a)
react :: Tuple b (Event a) -> b -- да, я знаю, что это стейт монада, но всё равно вычисление чистое
show :: b -> Effect ()
В результате вся логика приложения в чистом вычислении