Derive from any optic in scope whose carrier can always read. The optic parameter precedes the gate typeclass in the same using clause deliberately: same-clause resolution runs left to right, so the optic pins the carrier F before Accessor[F] is searched. (A context bound F[_, _]: Accessor would desugar — SIP-64, Scala 3.6+ — to a clause searched FIRST, with F still free, and fail.) Concrete optic classes implement CanGet directly, and a concrete given wins over this one by specificity, so this instance only serves optics known at the generic Optic[…, F] type.
Derive from any optic in scope whose carrier can always read. The optic parameter precedes the gate typeclass in the same using clause deliberately: same-clause resolution runs left to right, so the optic pins the carrier F before Accessor[F] is searched. (A context bound F[_, _]: Accessor would desugar — SIP-64, Scala 3.6+ — to a clause searched FIRST, with F still free, and fail.) Concrete optic classes implement CanGet directly, and a concrete given wins over this one by specificity, so this instance only serves optics known at the generic Optic[…, F] type.