adopt applicative style