звучит как будто у вас там что-то типа стрелок вместо монад
Да, стрелки ближе, но не совсем то. Оригинальная работа по стрелкам хороша тем, что приводит конкретный пример парсера на комбинаторах, который не работает с монадами.
Вообще, стрелки не так уж далеки от компиляторов. Комбинаторный язык Faust, на который я люблю ссылаться, имеет алгебру блочных диаграмм, похожую на формализм стрелок. Но диаграммы в Faust значительно более выразительные и практичные. И с их помощью действительно можно проводить интересные оптимизации. Это видно по компилятору Faust.