返回结果而不丢失类型

时间:2017-07-01 19:04:26

标签: scala types shapeless

我正在尝试在步骤结束时创建部分功能。以下是我代表流程结果的方法。

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
  }

通常,我有大约十个动作。但是,要解释这个问题,两个就足够了。

我想创建一个合并功能。它将创建一个像

这样的部分功能
  val pf = {
    case ActionType.Pre => //actiona instance
    case ActionType.Post => //actionb instanse
  }

如果我想查询ActionType.Pre到这个部分函数,​​我应该得到actionA实例。 ActionA只是一个将Integer作为参数并且基本上返回Success(结果)的函数。这是问题所在。在应用程序中,我想知道结果的类型,它是此案例的字符串,以及actionb的函数(Int =&gt; Double)。

我如何知道结果类型?

0 个答案:

没有答案