Refactor functors to be spread across files. It's a little bit crazy but we'll see how it works for making the code more readable
Merge branch 'feature-refactor-functors'