처음으로 cats을 사용하여 코드가 출현하여 day 1을 해결했습니다. 개선이 가능한지 궁금합니다. 고양이와 주립 모나드 사용 방법
내가 함께 왔어요def update(i: Instruction): PosAndDir => PosAndDir
다음 서명하는 방법 update
을 감안할 때 : 더 정확하게
val state: State[PosAndDir, List[Unit]] = instructions.map(i => State.modify(update(i))).toList.sequenceU
val finalState = state.runS(PosAndDir(Pos(0, 0), North)).value
또한
def update2(i: Instruction): State[PosAndDir, Option[Pos]] =
State.modify(update(i)).inspect(pad => if (i == Walk) Some(pad.pos) else None)
…
val state = instructions.map(update2).toList.sequenceU
val positions = state.runA(PosAndDir(Pos(0, 0), North)).value.flatten
질문은 다음과 같습니다
.value
(scalaz는 투명 함)으로 전화해야하는 이유는 무엇입니까?- 은 가독성을 높이기 위해 이해를 돕기 위해
update2
을 작성하는 방법이 있습니까? - cat에
Seq
의Applicative
인스턴스가 있습니다 (scalaz에는 없습니다). ? - 코드 개선을위한 아이디어가 있습니까?
당신은 PosAndDir','Pos'와'Dir' – Odomontois
물론'의 정의를 제공 할 수있다. 전체 코드는 다음과 같습니다. https://gist.github.com/YannMoisan/18e44d8998d42d745a3ea9caaae4c16a –