Muszę zrozumieć Scalasazakłócenia. Pozostawione na nich typy mogą być różnymi typami klas przypadków błędów z innych bibliotek. Na przykład jeden przypadek niepowodzenia może wynikać z przekroczenia limitu czasu HTTP, podczas gdy inny może reprezentować błąd analizy Json w Play.
Czy istnieje sposób użycia jakiejś formy klasy typuzadeklarować, że „te 4 klasy / cechy są tego rodzaju błędami” bez faktycznego dziedziczenia od wspólnej cechy? Jeśli tak się stanie, należałoby również wnioskować w ramach zrozumienia.
Odpowiedzi:
0 dla odpowiedzi № 1Jestem nowy w scalaz, ale w ten sposób poradziłem sobie z tym problemem:
Zdefiniuj naszych dekoratorów
sealed trait RequestError
case class ParseError(e: PlayJsonError) extends RequestError
case class HttpTimeoutError(e: NettyHttpError) extends RequestError
Posługiwać się leftMap
val r: RequestError / Message = for{
a <- readHttpContent().leftMap(e => HttpTimeoutError(e))
b <- parse(a).leftMap(e => ParseError(e))
} yield(b)