作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 FreeMonads 的玩具示例,使用 cats-free
和我的 FunctorTransformer(即解释器)从我的代数(sealed trait StartupActionA[T]
)到 Id[A]
似乎需要显式调用 asInstanceOf[Id[A]]
。
参见 https://github.com/rodoherty1/FreeMonads/blob/master/src/main/scala/io/rob/FreeMonads.scala#L45
根据Cats documentation ,我不需要显式调用 asInstanceOf[Id[A]]
。
这是我的代数:
sealed trait StartupActionA[A] extends Product with Serializable
case object StartCluster extends StartupActionA[Unit]
case object StartEventActorShard extends StartupActionA[ActorRef]
case class StartKafka(ref: ActorRef) extends StartupActionA[Option[ActorRef]]
这是我的翻译:
object Interpreter extends (StartupActionA ~> Id) {
override def apply[A](fa: StartupActionA[A]): Id[A] = fa match {
case StartCluster =>
println("Starting up the Akka Cluster").asInstanceOf[A]
case StartEventActorShard =>
system.actorOf(Props(new MyActor()), "MyActor").asInstanceOf[A]
case StartKafka(ref) =>
Some(ref).asInstanceOf[A]
}
}
我是否遗漏了隐式转换或者我是否错误地定义了我的代数?
最佳答案
你的代数很好,不要被 IDEA 误导。
这是一个没有使用 Akka 的小复制,它使用 Scala 2.12.4 和 cats-1.0.0-RC1 编译:
import cats.{Id, ~>}
sealed trait StartupActionA[A] extends Product with Serializable
case object StartCluster extends StartupActionA[Unit]
case object StartEventActorShard extends StartupActionA[String]
case class StartKafka(ref: String) extends StartupActionA[Option[String]]
object Interpreter extends (StartupActionA ~> Id) {
override def apply[A](fa: StartupActionA[A]): Id[A] = fa match {
case StartCluster => ()
case StartEventActorShard => "hello"
case StartKafka(ref) => Some(ref)
}
}
尽管 IDEA 用红色波浪线喊叫。
关于Scala Cats FreeMonad - 为什么我的解释器中需要 asInstanceOf[Id[A]]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48138744/
我是一名优秀的程序员,十分优秀!