For the typescript world, there is neverthrow[0] which offers a similar Result type.
Promise<Result<number, string>>
everywhere or type EitherT[F[_], E, A] = F[Either[E, A]]
and then def dosomething(): F[String, Number]
?Isn't this beautiful: https://github.com/7mind/distage-example/blob/develop/bifunc... ?
Probably we should say "union" instead of sum, as typescript unions are not discriminated. string | string in typescript is exactly the same as just string, while Either[String, String] is a type which is exactly a sum of two string types. Plus Either is biased towards R, the happy path value.