Тип клас за обединяване на несвързани случаи на отказ в моите дизюнкции на Scalaz

Имам за разбиране дизюнкциите на Scalaz. Левите типове в тях могат да бъдат различни типове класове за грешки от други библиотеки. Например, един случай на неуспех може да се дължи на изчакване на HTTP, докато друг може да представлява грешка при синтактичния анализ на Json в Play.

Има ли начин да се използва някаква форма на клас тип, за да се декларира, че „тези 4 класа/характеристики са всички от този тип грешка“, без всъщност да ги наследяват от обща черта? Ако това съществува, то също трябва да може да бъде изведено в рамките на за разбиране.


person Mad Dog    schedule 01.11.2013    source източник


Отговори (1)


Нов съм в scalaz, но ето как щях да се справя с проблема:

Дефинирайте нашите декоратори

sealed trait RequestError
case class ParseError(e: PlayJsonError) extends RequestError
case class HttpTimeoutError(e: NettyHttpError) extends RequestError

Използвайте leftMap

val r: RequestError \/ Message = for{
 a <- readHttpContent().leftMap(e => HttpTimeoutError(e))
 b <- parse(a).leftMap(e => ParseError(e))
} yield(b)
person Ben Aiad    schedule 07.07.2018