Scala 返回结果而不丢失类型

Scala 返回结果而不丢失类型,scala,types,shapeless,Scala,Types,Shapeless,我试图在步骤的末尾创建部分函数。下面是我的adt,它代表了这个过程的结果 sealed trait Result object Result { case class Success[T](result: T) extends Result case class Fail(cause: String) extends Result } 这是我对处理过程的表示。基本上,它们是功能性的 sealed trait Action[A, B] { type ActionT &

我试图在步骤的末尾创建部分函数。下面是我的adt,它代表了这个过程的结果

sealed trait Result

object Result {

  case class Success[T](result: T) extends Result

  case class Fail(cause: String) extends Result

}
这是我对处理过程的表示。基本上,它们是功能性的

  sealed trait Action[A, B] {
    type ActionT <: ActionType.type
    val function:(A) => Either[String, B]
    def apply(v1: A): Result = function(v1) match {
      case Right(v2) => Success(v2)
      case Left(cause) => Fail(cause)
    }
  }

  sealed trait ActionType

  object ActionType {
    case object Pre extends ActionType
    case object Post extends ActionType
  }

  case class ActionA(function: Int => Either[String, String]) extends Action[Int, String]
  {
    override type ActionT = ActionType.Pre.type
  }

  case class ActionB(function: Int => Either[String, Int => Double]) extends Action[String, Int => Double]
  {
    override type ActionT = ActionType.Post.type
  }
如果我想查询ActionType.Pre这个部分函数,我应该得到actionA实例。ActionA只是一个函数,它希望整数作为一个参数,基本上返回Success(result)。问题就在这里。在应用程序中,我想知道结果的类型,对于这种情况,它是字符串,对于actionb是函数(Int=>Double)


我怎样才能知道结果类型?

我不太明白“我怎样才能知道结果类型”是什么意思?是否希望
pf
函数返回类似于
的内容[Success[String],Success[Int=>Double]]
?pf函数将有数百个大小写。我想我也不能应付。当我把ActionType中的一个作为参数时,我想知道结果类型。例如:case-ActionType.Pre=>A的实例(Action[Int,String])case-ActionType.Post=>B的实例(Action[String,Int=>Double]),因此看起来您需要数百种不同类型的联合类型。这可能有助于:
  val pf = {
    case ActionType.Pre => //actiona instance
    case ActionType.Post => //actionb instanse
  }