Задумался что в контексте monad remote имеет смысл специальный класс OnException с одноименным методом таким что для любых двух buffered команд справедливо:
(cmd1 `onException` hnd1) <*> (cmd2 `onException` hnd2) == (cmd1 <*> cmd2) `onException` (hnd1 >> hnd2)
Правда форкать exceptions так не хочется. Также никак не пойму кто кому суперкласс: OnException для MonadCatch или наоборот.