Я пытаюсь совместить Reader
монада с монахом State
. Вот мой код:Как объединить читатель и государственную монаду
object StatePoc extends App {
def startsWithState : Reader[String, State[Seq[String], Unit]] = Reader { s => State { ss => (ss.filter(_.startsWith(s)), Unit)}}
def endsWithState : Reader[String, State[Seq[String], Unit]] = Reader { s => State { ss => (ss.filter(_.endsWith(s)), Unit)}}
def process: Kleisli[Id.Id, String, State[Seq[String], Unit]] = {
for {
s <- startsWithState
e <- endsWithState
} yield e
}
val all = Seq("AB", "BA", "ABA", "ABBA")
println(process("A")(all))
}
К сожалению, этот код не возвращает ожидаемый результат: List(BA, ABA, ABBA)
вместо List(ABA, ABBA)
.
Спасибо. Использование вложенного для улучшения компа также процесса DEF = {{ для с <- startsWithState х <- endsWithState } {выходом для _ <- х сс <- с } выход сс } –