MF3 — .collectMap coherence with Functor[F].map. At the generic factory (focus = s, rebuild = identity, S = F[A]), .collectMap[A](agg)(s) is definitionally F.map(focus)(_ => agg(focus)). The law works at S = F[A] by assumption; that's true for every shipped MultiFocus.apply[F, A] fixture.
MF3 — .collectMap coherence with Functor[F].map. At the generic factory (focus = s, rebuild = identity, S = F[A]), .collectMap[A](agg)(s) is definitionally F.map(focus)(_ => agg(focus)). The law works at S = F[A] by assumption; that's true for every shipped MultiFocus.apply[F, A] fixture.
MF4 — .collectWith subsumes .collectMap: a constant per-focus function recovers the broadcast exactly. Unlike MF3 this needs no S =:= F[A] evidence — both sides go through the optic, so the law holds at any MultiFocus[F] optic, composed ones included.
MF4 — .collectWith subsumes .collectMap: a constant per-focus function recovers the broadcast exactly. Unlike MF3 this needs no S =:= F[A] evidence — both sides go through the optic, so the law holds at any MultiFocus[F] optic, composed ones included.