direct effects without monad interface