나는 스칼라의 고양이 라이브러리, 특히 State Monad를 살펴 보았습니다.고양이에서 StateMonad 시퀀싱
object Splitter {
def apply(maxSize: Int, overlap: Int): State[StringBuilder, String] = State(
builder => {
val splitPoint = math.min(builder.size, maxSize + overlap)
(builder.drop(maxSize), builder.substring(0, splitPoint))
}
)
}
는 국가 모나드 작업의 한 단계를 실행 : 내가 분할 문자열 나머지 모두 StringBuilder를 잠재적으로 큰 문자열 (모두 StringBuilder를) 분할 및 반환 몇 가지 논리를 만들고 싶었 장난감 예를 들어
val stop = State.inspect((s: StringBuilder) => s.isEmpty)
Splitter(3, 2).untilM[Vector](stop).run(new StringBuilder("tarsntiars"))
그러나,이 untilM대로 작동하지 않습니다
는 모나드 특성의 구성원 및 범위에는 암시 적 변환이없는 : 모두 StringBuilder 결국 빌 때까지 잘하지만 난 체인의 모든 단계를 원했다. 무엇 작동 것은 그러나val monad = StateT.catsDataMonadForStateT[Eval, StringBuilder]
monad.untilM[List, String](Splitter(3, 2))(stop).run(new StringBuilder("tarsntiars"))
, 나는 짧은이 작동하지 않는 이유 그래서 궁금 훨씬 더 읽을 생각하십니까? 일반적인 MonadOps 메커니즘이 여기서 왜 작동하지 않습니까?
"정지"란 무엇입니까? – mtk
정지의 정의를 추가했습니다. – peri4n