It boils down to DSLs with interpreters, using underlying primitive actions in a command pattern. The interpreter allows for optimizations. Using the idea repeatedly allows for the formation of boundaries, key ideas is to treat a framework as a bundle of commands and write an interpreter for that. Not many good resources in my opinion; I'm not fully sold on the free monad or tagless final stuff, mainly because I find it hard to read despite a good amount of study.
haskellandchill|7 years ago