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 validateUserWithRules
Gopal S Akshintala
05/04/2020, 10:55 AMvalidateEmailWithRules
pakoito
05/04/2020, 10:59 AMflatMap
of validatorAE
pakoito
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 AMvalidateUserWithRules
pakoito
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 PMmapN
pakoito
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 F
pakoito
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 flatMap
pakoito
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