applicative refactor.