stream[TimeMovingAverage].filter("name = '#name'") |> { str =>
having.cata(str.where(_), str)
}
или даже
stream[TimeMovingAverage].filter("name = '#name'") |> (
having.cata(expr => _.where(expr), identity) : T => T
)
T => T
необходимо изменить на тип stream[TimeMovingAverage]
, что делает его менее практичным, если вы не найдете следующую специализацию |>
в scalaz или не определите ее самостоятельно:
implicit def WrapIt[T](t: T) = new {
def |~> (arg: T => T) = arg(t)
def |?> (arg: Option[T => T]): T = arg.getOrElse(identity (_:T)).apply(t)
}
stream[TimeMovingAverage].filter("name = '#name'") |~> having.cata(expr => _.where(expr), identity)
stream[TimeMovingAverage].filter("name = '#name'") |?> having.map(expr => _.where(expr))
Не уверен, стоит ли действительно что-то подобное делать.