在使用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)
}