note applicative arrows are WIP