在我的Scalaz析取中键入用于联合不相关失败案例的类

时间:2013-11-01 03:21:57

标签: scala scalaz shapeless scalaz7

我对Scalaz分离有所了解。这些上的左侧类型可以是来自其他库的不同类型的错误案例类。例如,一个故障情况可能是由于HTTP超时,而另一个故障情况可能表示Play中的Json解析错误。

有没有办法使用某种形式的类型来声明&#​​39;这4个类/特征都是这种类型的错误'没有让他们继承共同特征?如果确实存在,则还需要能够在理解范围内推断出来。

1 个答案:

答案 0 :(得分: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)