Для меня более общий способ - через пару монад / комонад. Это обобщает общий подход «монады», который следует правильно называть подходом «сильной монады», поскольку он работает только с сильными монадами.
Переход к паре монад / комонад позволяет моделировать эффекты, которые приводят к тому, что некоторые переменные перестают быть доступными. Примером, в котором это полезно, является эффект переноса потока на другой хост в распределенном параметре.
Дополнительный метод, представляющий исторический интерес, состоит в том, чтобы сделать всю программу функцией, отображающей поток / список входных событий в поток / список выходных событий. См .: «Как объявить императив» Фила Уодлера: http://www.cs.bell -labs.com / ~ wadler / themes / monads.html # monadsdeclare