Whenever `fail` comes up, there are usually remarks to the effect that it doesn't really belong in the definition of `Monad`. Where does `fail` belong? Could it go in `Arrow`? -- _jsn