second :) val userResult: Either<ExceptionCase, User> = … val companyResult: Either<ExceptionCase, Company> = … val userWithCompany = EitherMonad<User>().binding { val user = bind { userResult } val company = bind { companyResult } yields(/* Merge them */) }