raulraja
05/26/2019, 10:02 PMobjectMapper.convertValue
can fail with an exception then it should be suspended and you should be using IO
instead of Try
. Try is going away or going to be modified because it can’t suspend effects or run suspend functions. If we make Try support suspend then we have IO.
On a different token you can encode internally all your error handling efforts including validation without implying fail fast or error accumulation and then export a la carte in your public API the error strategies for each data type that you want to support.
This link supports with the same code both fail fast and error accumulation https://arrow-kt.io/docs/patterns/error_handling/#example--alternative-validation-strategies-using-applicativeerrorDerek Berner
05/28/2019, 3:42 PMobjectMapper.convertValue
is a 3rd party libraryDerek Berner
05/28/2019, 3:44 PMwithContext(<http://Dispatchers.IO|Dispatchers.IO>)
but cannot be directly suspendedDerek Berner
05/28/2019, 3:45 PMBob Glamm
05/28/2019, 4:32 PMBob Glamm
05/28/2019, 4:32 PMraulraja
05/28/2019, 5:07 PMDerek Berner
05/28/2019, 5:25 PMDerek Berner
05/28/2019, 5:25 PMApplicativeError<ForIO, Throwable>
Bob Glamm
05/28/2019, 5:28 PMassert(args.size == 3)
must fail fast in order for the subsequent objectMapper.convertValue()
methods to properly executeBob Glamm
05/28/2019, 5:28 PMobjectMapper.convertValue()
to all execute?Derek Berner
05/28/2019, 5:29 PMDerek Berner
05/28/2019, 5:29 PMBob Glamm
05/28/2019, 5:30 PMDerek Berner
05/28/2019, 5:30 PMBob Glamm
05/28/2019, 5:31 PMDerek Berner
05/28/2019, 5:31 PMargs.size == 3
then accumulate errors from all 3, etcDerek Berner
05/28/2019, 5:32 PMBob Glamm
05/28/2019, 5:32 PMBob Glamm
05/28/2019, 5:33 PMDerek Berner
05/28/2019, 5:33 PMtraverse
isn't polymorphicDerek Berner
05/28/2019, 5:34 PMDerek Berner
05/28/2019, 5:34 PMApplicative
Bob Glamm
05/28/2019, 5:34 PMDerek Berner
05/28/2019, 5:35 PMtraverse
exchanges polymorphism for variadicity (is that even the right term??)Bob Glamm
05/28/2019, 5:36 PMDerek Berner
05/28/2019, 5:39 PMValidatedIO<E: Semigroup<E>, Z> = IO<Validated<E,Z>>
Derek Berner
05/28/2019, 5:40 PMApplicativeError<F, E>
Derek Berner
05/28/2019, 5:41 PMkapt
librariesBob Glamm
05/28/2019, 5:41 PM*
why not just use ApplicativeError<Any, Nel<Throwable>>
?Bob Glamm
05/28/2019, 5:41 PMDerek Berner
05/28/2019, 5:42 PMForXXX
that Arrow implements through annotation processing magicBob Glamm
05/28/2019, 5:42 PMDerek Berner
05/28/2019, 5:44 PMApplicativeError
is a type constructor that represents the functor type being usedDerek Berner
05/28/2019, 5:44 PMraulraja
05/28/2019, 5:51 PMraulraja
05/28/2019, 5:51 PMDerek Berner
05/28/2019, 5:51 PMraulraja
05/28/2019, 5:52 PMDerek Berner
05/28/2019, 5:52 PMobjectMapper
is a JSON parser - this is happening near the point of the HTTP request handlerraulraja
05/28/2019, 5:53 PMDerek Berner
05/28/2019, 5:54 PMsuspend fun
raulraja
05/28/2019, 5:54 PMDerek Berner
05/28/2019, 5:55 PMPipelineContext
receiver which extends CoroutineScope
Derek Berner
05/28/2019, 5:56 PMValidated
had a monad transformer ValidatedT
I could work with thatraulraja
05/28/2019, 5:56 PMobjectMapper
thread safe?Derek Berner
05/28/2019, 5:57 PMraulraja
05/28/2019, 5:57 PMraulraja
05/28/2019, 6:58 PMDerek Berner
05/28/2019, 7:00 PMDerek Berner
05/28/2019, 7:01 PM