fun add(resource: UnprovisionedDeviceResource): Either { val id = resource.resourceId val readError = resourceIdValidator.validateIsReadType(id.resourceType).flatMap { bowlerRPCProtocol.addRead(id) }.mapLeft { "Not a Read" } val writeError = resourceIdValidator.validateIsWriteType(id.resourceType).flatMap { bowlerRPCProtocol.addWrite(id) }.mapLeft { "Not a Write" } return tupled(fromEither(readError), fromEither(writeError)) .fold({ errorList -> ... }, { (r, w) -> ... }) }