Tasks and Promises in fp-ts
Updated:In fp-ts a Task
is just a a lazy Promise
, eg. () => Promise
, since Promises
are eager normally (ie. they execute their computation when created, not when await
-ed on). See getLine
in fp-ts-contrib for an example.
A TaskEither
is for representing Promises
that can reject. The reason the tryCatch
method, intended for converting a Promise
to a TaskEither
requires a second function for handling errors is because a Promise
doesn’t store type information about the error. This is in contrast to callback-style async functions which include the error type as the first parameter of the callback, and which is why taskify
exists for directly turning them into functions returning TaskEither
.
It’s unclear to me why there isn’t a tryCatch
variant that assumes the identity function for the second parameter, thus converting a Promise<A>
into a TaskEither<unknown, A>
.