Вот, кстати, раз уж мы тут коснулись Reader и прочих монадок, то там-то есть возможность повлиять на "непрозрачное вычисление с эффектом": для Reader можно подменить окружение, поступающее на вход, Writer можно назначить цензора, который предобработает выход, со State вообще позволяет как входное, так и выходное состояние контролировать.