如何模式匹配Scalaz Tag Generic并使用Generic

时间:2014-04-04 21:24:17

标签: generics tags pattern-matching match scalaz

我希望能够做到以下

之类的事情
sealed trait S
trait S1 extends S
trait S2 extends S


case class A[Z <: S](item: URI @@ Z)

class SActor extends Actor {
  def receive = {
    case A[Z](item) =>
       val item2: URI @@ Z = //do some sort of operation
       sender ! A[Z](item2)
    case _ =>
  }
}

这是对实际代码的抽象。但问题归结为,我似乎无法抓住Z.我不想知道它是哪一个类,我只想维护Tag Z并能够在以后使用相同的Generic类标签创建另一个对象标记。这可以在传递一个标记为Z的结果的函数之外完成吗?

如果您在接收方法的case块中,则以下çode存在同样的问题,

EitherT((actor ? A(item)).mapTo[A] 
//assume actor responds back with an A and the same Tag

A采用Generic但我们不知道要分配哪一个。我只是想使用它开始的那个(假设演员坚持那个合同)。编译器会说A需要泛型,但它要求特定的。 -_-感谢您阅读本文,特别感谢能解决这个问题的人

0 个答案:

没有答案