如何在以下代码中修复State monoid类型

时间:2019-07-07 18:08:06

标签: scala scalaz monoids

在使用CQRS时,我正在使用State monoid更新“功能和响应域”建模手册中列出的对象的状态。据我了解,如果您不想返回任何值,则可以只使用()如下。但是从我身上,我不断收到“ Unit类型的表达式不符合预期的A类型”。这些行如下
状态{s =>(updateState(r,s),())}给我这个错误。 据我了解,该代码以前曾在本书出版时起作用,由于Scalaz的最新更改,我猜现在它已被破坏。几天前,我刚刚开始查看Scalaz,想知道是否有Scalaz专家可以加入。

我已经尝试将State [Map [String,Account],A]更改为State [Map [String,Account],Unit],但这会中断执行。

object PureInterpreter {
  import Event._
  import Commands.Command
  type MapState[A] = State[Map[String, Account], A]

  val step = new (Event ~> MapState) {
    override def apply[A](fa: Event[A]): MapState[A] = fa match {
      case o @ Opened(no, _, _) =>
        State { s => (updateState(o, s), no) }

      case c @ Closed(_, _) =>
        State { s => (updateState(c, s), ()) }

      case d @ Debited(_, _) =>
        State { s => (updateState(d, s), ()) }

      case r @ Credited(_, _) =>
        State { s => (updateState(r, s), ()) }
    }
  }

  def interpret[A](c: Command[A], state: Map[String, Account] = Map.empty): Map[Strin  g, Account] =
    c.foldMap(step).exec(state)

}

0 个答案:

没有答案