add context argument to apply
promise-ish monad-ish
update implementation of promise-ish?