Free and operational monad that efficiently support alternating between building and observing.