a bunch more monadic promise functions