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 PMApplicativeBob 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 funraulraja
05/28/2019, 5:54 PMDerek Berner
05/28/2019, 5:55 PMPipelineContext receiver which extends CoroutineScopeDerek 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