コードの出現の初日を解決するために初めて猫を使用しましたが、改善できるかどうか疑問に思っています。
update
次のシグネチャを
持つメソッドが与えられた場合def update(i: Instruction): PosAndDir => PosAndDir
私が思いついた:
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
読みやすさを向上させるために理解を深めるために書く方法はありますか?Applicative
in cat のインスタンスはありますSeq
か (scalaz には存在しないことはわかっています)。?- コードを改善するアイデアはありますか?