Maybe the Fs promise API is not so desirable for everyone, i.e. using it with Relude.IO is unnecessarily complicated; having to ignore, then_ and catch the promise values. Another drawback of using Js.Promise.t is the opaque error type where the callback versions actually have the error type well defined (mostly the built-in Error object with at least message and name I think).