5

我对 Scalaz 析取有一个理解。这些左侧的类型可以是来自其他库的不同类型的错误案例类。例如,一种失败情况可能是由于 HTTP 超时,而另一种可能表示 Play 中的 Json 解析错误。

有没有一种方法可以使用某种形式的类型类来声明“这 4 个类/特征都是这种类型的错误”,而实际上并不让它们继承自一个共同的特征?如果这确实存在,则还需要能够在 for 理解中进行推断。

4

1 回答 1

0

我是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)
于 2018-07-07T09:30:31.820 回答