can you move the order to be:
```scala
def foldM[M[_],T,U](acc: T, xs: GenTraversable[U])(fn: (T,U)=>M[T])(implicit monad: Monad[M])
```
So the ordering matches the way we normally write (and we can do):
```scala
foldM(0, List(1,2,3,4)) { (x,y) => if(x < 3) None else Some(x + y) }
```