added a free monad based on monadic reflection without remorse