Use Church-encoded Free monad