pakoito
05/04/2020, 10:50 AMvalidatorAE.validateEmailWithRules(user.email).bind()
cityShouldBeValid(user).bind()
loginShouldNotExit(user).bind()Gopal S Akshintala
05/04/2020, 10:51 AMvalidatorAE, so this is not failing-fastGopal S Akshintala
05/04/2020, 10:52 AMfun <F, S> EffectValidator<F, S, ValidationError>.cityShouldBeValid(user: User): Kind<F, Kind<S, Boolean>> = fx.async {
repo.run {
val cityValid = user.isUserCityValid().bind()
if (cityValid) validatorAE.just(cityValid)
else validatorAE.raiseError(UserCityInvalid(user.city).nel())
}
}pakoito
05/04/2020, 10:52 AMvalidatorAE.validateEmailWithRules(user.email) will short if it failspakoito
05/04/2020, 10:52 AM.bind() is equivalent to putting the rest of the function as the flatMap bodyGopal S Akshintala
05/04/2020, 10:55 AMbind(), the flatMap is done on F not on the Either which is returned from validateUserWithRulesGopal S Akshintala
05/04/2020, 10:55 AMvalidateEmailWithRulespakoito
05/04/2020, 10:59 AMflatMap of validatorAEpakoito
05/04/2020, 10:59 AMGopal S Akshintala
05/04/2020, 11:00 AMpakoito
05/04/2020, 11:00 AMval a = cityShouldBeValid(user).bind()
val b = loginShouldNotExit(user).bind()
validatorAE.validateEmailWithRules(user.email).flatMap { a.flatMap { b } }pakoito
05/04/2020, 11:00 AMvalidateUserWithRulespakoito
05/04/2020, 11:00 AMGopal S Akshintala
05/04/2020, 11:00 AMGopal S Akshintala
05/04/2020, 11:01 AMGopal S Akshintala
05/04/2020, 11:01 AMGopal S Akshintala
05/04/2020, 11:06 AMpakoito
05/04/2020, 11:31 AMpakoito
05/04/2020, 11:31 AMpakoito
05/04/2020, 11:32 AMpakoito
05/04/2020, 11:32 AMpakoito
05/04/2020, 11:32 AMGopal S Akshintala
05/04/2020, 11:33 AMpakoito
05/04/2020, 11:33 AMval a = cityShouldBeValid(user).bind()
val b = loginShouldNotExit(user).bind()
what is a and b after binding there?pakoito
05/04/2020, 11:33 AMGopal S Akshintala
05/04/2020, 11:33 AMpakoito
05/04/2020, 11:33 AMpakoito
05/04/2020, 11:33 AMpakoito
05/04/2020, 11:33 AMGopal S Akshintala
05/04/2020, 11:34 AMGopal S Akshintala
05/04/2020, 11:44 AMpakoito
05/04/2020, 12:13 PMpakoito
05/04/2020, 12:13 PMvalidateEmailWithRules
.flatMap { cityShouldBeValid }
.flatMap { loginShouldNotExit }pakoito
05/04/2020, 12:14 PMpakoito
05/04/2020, 12:14 PMpakoito
05/04/2020, 12:14 PMpakoito
05/04/2020, 12:15 PMvalidateEmailWithRules
.flatMap {
Either.tupled(cityShouldBeValid, loginShouldNotExit)
}Gopal S Akshintala
05/04/2020, 1:36 PMcityShouldBeValid and loginShouldNotExit for clarity on types, as you review, but I dnt want to make those calls early on.Gopal S Akshintala
05/04/2020, 1:37 PMvalidateEmailWithRules failGopal S Akshintala
05/04/2020, 1:37 PMmapNpakoito
05/04/2020, 1:53 PMEither into a Kind with whatever properties you wantpakoito
05/04/2020, 1:54 PMpakoito
05/04/2020, 1:55 PMfun <F> EffectValidatorFailFast<F, ValidationError>.validateUserWithRules(user: User): EitherT<F, NonEmptyList<ValidationError>, Boolean>pakoito
05/04/2020, 1:56 PMEitherT.fx(this).async {
just(validateEmailWithRules)
.flatMap(this) { cityShouldBeValid(user) }
.flatMap(this) { loginShouldNotExit(user) }
}pakoito
05/04/2020, 1:57 PMpakoito
05/04/2020, 1:57 PMpakoito
05/04/2020, 1:57 PMpakoito
05/04/2020, 1:58 PMjust(validateEmailWithRules) is probably something else, you have to wrap the either in ``validateEmailWithRules`` into the Kind of Fpakoito
05/04/2020, 1:58 PMpakoito
05/04/2020, 1:58 PMGopal S Akshintala
05/04/2020, 2:04 PMEitherT as well, but ran into compiler problemsGopal S Akshintala
05/04/2020, 2:04 PMGopal S Akshintala
05/04/2020, 2:05 PMpakoito
05/04/2020, 2:22 PMpakoito
05/04/2020, 2:23 PMbind and flatMappakoito
05/04/2020, 2:23 PMpakoito
05/04/2020, 2:23 PMpakoito
05/04/2020, 2:23 PMpakoito
05/04/2020, 2:23 PMGopal S Akshintala
05/04/2020, 2:23 PMpakoito
05/04/2020, 2:23 PMGopal S Akshintala
05/04/2020, 2:24 PMGopal S Akshintala
05/04/2020, 2:24 PM