55import com .jnape .palatable .lambda .functions .Fn2 ;
66import com .jnape .palatable .lambda .functions .builtin .fn2 .Both ;
77import com .jnape .palatable .lambda .functor .Applicative ;
8+ import com .jnape .palatable .lambda .functor .Cartesian ;
89import com .jnape .palatable .lambda .functor .Functor ;
910import com .jnape .palatable .lambda .functor .Profunctor ;
1011import com .jnape .palatable .lambda .monad .Monad ;
1112
13+ import static com .jnape .palatable .lambda .adt .hlist .HList .tuple ;
14+ import static com .jnape .palatable .lambda .functions .builtin .fn2 .Into .into ;
1215import static com .jnape .palatable .lambda .optics .Iso .iso ;
1316import static com .jnape .palatable .lambda .optics .Lens .Simple .adapt ;
1417import static com .jnape .palatable .lambda .optics .functions .Set .set ;
138141 */
139142@ FunctionalInterface
140143public interface Lens <S , T , A , B > extends
141- Optic <Fn1 < ?, ?>, Functor <?, ?>, S , T , A , B >,
144+ Optic <Cartesian <?, ?, ?>, Functor <?, ?>, S , T , A , B >,
142145 Monad <T , Lens <S , ?, A , B >>,
143146 Profunctor <S , T , Lens <?, ?, A , B >> {
144147
@@ -269,15 +272,15 @@ default Iso<S, T, A, B> toIso(S s) {
269272 * {@inheritDoc}
270273 */
271274 @ Override
272- default <C , D > Lens <S , T , C , D > andThen (Optic <? super Fn1 < ?, ?>, ? super Functor <?, ?>, A , B , C , D > f ) {
275+ default <C , D > Lens <S , T , C , D > andThen (Optic <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, A , B , C , D > f ) {
273276 return lens (Optic .super .andThen (f ));
274277 }
275278
276279 /**
277280 * {@inheritDoc}
278281 */
279282 @ Override
280- default <R , U > Lens <R , U , A , B > compose (Optic <? super Fn1 < ?, ?>, ? super Functor <?, ?>, R , U , S , T > g ) {
283+ default <R , U > Lens <R , U , A , B > compose (Optic <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, R , U , S , T > g ) {
281284 return lens (Optic .super .compose (g ));
282285 }
283286
@@ -294,13 +297,14 @@ default <R, U> Lens<R, U, A, B> compose(Optic<? super Fn1<?, ?>, ? super Functor
294297 */
295298 static <S , T , A , B > Lens <S , T , A , B > lens (Fn1 <? super S , ? extends A > getter ,
296299 Fn2 <? super S , ? super B , ? extends T > setter ) {
297- return lens (Optic .<Fn1 < ?, ?>, Functor <?, ?>,
300+ return lens (Optic .<Cartesian <?, ?, ?>, Functor <?, ?>,
298301 S , T , A , B ,
299302 Functor <B , ? extends Functor <?, ?>>,
300303 Functor <T , ? extends Functor <?, ?>>,
301- Fn1 <A , Functor <B , ? extends Functor <?, ?>>>,
302- Fn1 <S , Functor <T , ? extends Functor <?, ?>>>>optic (afb -> s -> afb .apply (getter .apply (s ))
303- .fmap (b -> setter .apply (s , b ))));
304+ Cartesian <A , Functor <B , ? extends Functor <?, ?>>, ? extends Cartesian <?, ?, ?>>,
305+ Cartesian <S , Functor <T , ? extends Functor <?, ?>>, ? extends Cartesian <?, ?, ?>>>optic (
306+ afb -> afb .<S >cartesian ().diMap (s -> tuple (s , getter .apply (s )),
307+ into ((s , fb ) -> fb .fmap (setter .apply (s ))))));
304308 }
305309
306310 /**
@@ -313,11 +317,14 @@ static <S, T, A, B> Lens<S, T, A, B> lens(Fn1<? super S, ? extends A> getter,
313317 * @param <B> the type of the "smaller" update value
314318 * @return the {@link Lens}
315319 */
316- static <S , T , A , B > Lens <S , T , A , B > lens (Optic <? super Fn1 <?, ?>, ? super Functor <?, ?>, S , T , A , B > optic ) {
320+ static <S , T , A , B > Lens <S , T , A , B > lens (
321+ Optic <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, S , T , A , B > optic ) {
317322 return new Lens <S , T , A , B >() {
318323 @ Override
319- public <CoP extends Profunctor <?, ?, ? extends Fn1 <?, ?>>, CoF extends Functor <?, ? extends Functor <?, ?>>,
320- FB extends Functor <B , ? extends CoF >, FT extends Functor <T , ? extends CoF >,
324+ public <CoP extends Profunctor <?, ?, ? extends Cartesian <?, ?, ?>>,
325+ CoF extends Functor <?, ? extends Functor <?, ?>>,
326+ FB extends Functor <B , ? extends CoF >,
327+ FT extends Functor <T , ? extends CoF >,
321328 PAFB extends Profunctor <A , FB , ? extends CoP >,
322329 PSFT extends Profunctor <S , FT , ? extends CoP >> PSFT apply (PAFB pafb ) {
323330 return optic .apply (pafb );
@@ -378,21 +385,21 @@ static <S, A, B> Lens.Simple<S, Tuple2<A, B>> both(Lens.Simple<S, A> f, Lens.Sim
378385 * @param <A> the type of both "smaller" values
379386 */
380387 @ FunctionalInterface
381- interface Simple <S , A > extends Lens <S , S , A , A >, Optic .Simple <Fn1 < ?, ?>, Functor <?, ?>, S , A > {
388+ interface Simple <S , A > extends Lens <S , S , A , A >, Optic .Simple <Cartesian <?, ?, ?>, Functor <?, ?>, S , A > {
382389
383390 /**
384391 * {@inheritDoc}
385392 */
386393 @ Override
387- default <B > Lens .Simple <S , B > andThen (Optic .Simple <? super Fn1 < ?, ?>, ? super Functor <?, ?>, A , B > f ) {
394+ default <B > Lens .Simple <S , B > andThen (Optic .Simple <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, A , B > f ) {
388395 return Lens .Simple .adapt (Lens .super .andThen (f ));
389396 }
390397
391398 /**
392399 * {@inheritDoc}
393400 */
394401 @ Override
395- default <R > Lens .Simple <R , A > compose (Optic .Simple <? super Fn1 < ?, ?>, ? super Functor <?, ?>, R , S > g ) {
402+ default <R > Lens .Simple <R , A > compose (Optic .Simple <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, R , S > g ) {
396403 return Lens .Simple .adapt (Lens .super .compose (g ));
397404 }
398405
@@ -404,10 +411,11 @@ default <R> Lens.Simple<R, A> compose(Optic.Simple<? super Fn1<?, ?>, ? super Fu
404411 * @param <A> A/B
405412 * @return the simple lens
406413 */
407- static <S , A > Lens .Simple <S , A > adapt (Optic <? super Fn1 <?, ?>, ? super Functor <?, ?>, S , S , A , A > lens ) {
414+ static <S , A > Lens .Simple <S , A > adapt (
415+ Optic <? super Cartesian <?, ?, ?>, ? super Functor <?, ?>, S , S , A , A > lens ) {
408416 return new Lens .Simple <S , A >() {
409417 @ Override
410- public <CoP extends Profunctor <?, ?, ? extends Fn1 < ?, ?>>,
418+ public <CoP extends Profunctor <?, ?, ? extends Cartesian <?, ?, ?>>,
411419 CoF extends Functor <?, ? extends Functor <?, ?>>, FB extends Functor <A , ? extends CoF >,
412420 FT extends Functor <S , ? extends CoF >, PAFB extends Profunctor <A , FB , ? extends CoP >,
413421 PSFT extends Profunctor <S , FT , ? extends CoP >> PSFT apply (PAFB pafb ) {
0 commit comments