WIP Refactor into using free monad w/ interpreters