diff --git a/arrow-libs/optics/arrow-optics/api/arrow-optics.api b/arrow-libs/optics/arrow-optics/api/arrow-optics.api index e3b52d80c6f..afa83f26856 100644 --- a/arrow-libs/optics/arrow-optics/api/arrow-optics.api +++ b/arrow-libs/optics/arrow-optics/api/arrow-optics.api @@ -457,8 +457,14 @@ public final class arrow/optics/PrismKt { public final class arrow/optics/dsl/AtKt { public static final fun at (Larrow/optics/PLens;Larrow/optics/typeclasses/At;Ljava/lang/Object;)Larrow/optics/PLens; + public static final fun at (Larrow/optics/PLens;Ljava/lang/Object;)Larrow/optics/PLens; public static final fun at (Larrow/optics/POptional;Larrow/optics/typeclasses/At;Ljava/lang/Object;)Larrow/optics/POptional; + public static final fun at (Larrow/optics/POptional;Ljava/lang/Object;)Larrow/optics/POptional; public static final fun at (Larrow/optics/PTraversal;Larrow/optics/typeclasses/At;Ljava/lang/Object;)Larrow/optics/PTraversal; + public static final fun at (Larrow/optics/PTraversal;Ljava/lang/Object;)Larrow/optics/PTraversal; + public static final fun atSet (Larrow/optics/PLens;Ljava/lang/Object;)Larrow/optics/PLens; + public static final fun atSet (Larrow/optics/POptional;Ljava/lang/Object;)Larrow/optics/POptional; + public static final fun atSet (Larrow/optics/PTraversal;Ljava/lang/Object;)Larrow/optics/PTraversal; } public final class arrow/optics/dsl/EitherKt { @@ -472,12 +478,37 @@ public final class arrow/optics/dsl/EitherKt { public final class arrow/optics/dsl/EveryKt { public static final fun every (Larrow/optics/PTraversal;Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everyChar (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everyNonEmptyList (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everyRight (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everySequence (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everySome (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; + public static final fun everyValue (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; public static final fun getEvery (Larrow/optics/PTraversal;)Larrow/optics/PTraversal; } +public final class arrow/optics/dsl/FilterIndexKt { + public static final fun filter (Larrow/optics/PTraversal;Larrow/optics/typeclasses/FilterIndex;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; + public static final fun filter (Larrow/optics/PTraversal;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; + public static final fun filterChars (Larrow/optics/PTraversal;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; + public static final fun filterNonEmptyList (Larrow/optics/PTraversal;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; + public static final fun filterSequence (Larrow/optics/PTraversal;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; + public static final fun filterValues (Larrow/optics/PTraversal;Lkotlin/jvm/functions/Function1;)Larrow/optics/PTraversal; +} + public final class arrow/optics/dsl/IndexKt { + public static final fun index (Larrow/optics/POptional;I)Larrow/optics/POptional; public static final fun index (Larrow/optics/POptional;Larrow/optics/typeclasses/Index;Ljava/lang/Object;)Larrow/optics/POptional; + public static final fun index (Larrow/optics/PTraversal;I)Larrow/optics/PTraversal; public static final fun index (Larrow/optics/PTraversal;Larrow/optics/typeclasses/Index;Ljava/lang/Object;)Larrow/optics/PTraversal; + public static final fun indexNonEmptyList (Larrow/optics/POptional;I)Larrow/optics/POptional; + public static final fun indexNonEmptyList (Larrow/optics/PTraversal;I)Larrow/optics/PTraversal; + public static final fun indexSequence (Larrow/optics/POptional;I)Larrow/optics/POptional; + public static final fun indexSequence (Larrow/optics/PTraversal;I)Larrow/optics/PTraversal; + public static final fun indexString (Larrow/optics/POptional;I)Larrow/optics/POptional; + public static final fun indexString (Larrow/optics/PTraversal;I)Larrow/optics/PTraversal; + public static final fun indexValues (Larrow/optics/POptional;Ljava/lang/Object;)Larrow/optics/POptional; + public static final fun indexValues (Larrow/optics/PTraversal;Ljava/lang/Object;)Larrow/optics/PTraversal; } public final class arrow/optics/dsl/NullableKt { diff --git a/arrow-libs/optics/arrow-optics/api/arrow-optics.klib.api b/arrow-libs/optics/arrow-optics/api/arrow-optics.klib.api index 09b3db9321a..ac5df298976 100644 --- a/arrow-libs/optics/arrow-optics/api/arrow-optics.klib.api +++ b/arrow-libs/optics/arrow-optics/api/arrow-optics.klib.api @@ -246,15 +246,37 @@ final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> ( final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.optics/POptional<#A, #A, #B, #B>).arrow.optics.dsl/at(arrow.optics.typeclasses/At<#B, #C, #D>, #C): arrow.optics/POptional<#A, #A, #D, #D> // arrow.optics.dsl/at|at@arrow.optics.POptional<0:0,0:0,0:1,0:1>(arrow.optics.typeclasses.At<0:1,0:2,0:3>;0:2){0§;1§;2§;3§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.optics/POptional<#A, #A, #B, #B>).arrow.optics.dsl/index(arrow.optics.typeclasses/Index<#B, #C, #D>, #C): arrow.optics/POptional<#A, #A, #D, #D> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,0:1,0:1>(arrow.optics.typeclasses.Index<0:1,0:2,0:3>;0:2){0§;1§;2§;3§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, #B, #B>).arrow.optics.dsl/at(arrow.optics.typeclasses/At<#B, #C, #D>, #C): arrow.optics/PTraversal<#A, #A, #D, #D> // arrow.optics.dsl/at|at@arrow.optics.PTraversal<0:0,0:0,0:1,0:1>(arrow.optics.typeclasses.At<0:1,0:2,0:3>;0:2){0§;1§;2§;3§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, #B, #B>).arrow.optics.dsl/filter(arrow.optics.typeclasses/FilterIndex<#B, #C, #D>, kotlin/Function1<#C, kotlin/Boolean>): arrow.optics/PTraversal<#A, #A, #D, #D> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,0:1,0:1>(arrow.optics.typeclasses.FilterIndex<0:1,0:2,0:3>;kotlin.Function1<0:2,kotlin.Boolean>){0§;1§;2§;3§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?, #D: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, #B, #B>).arrow.optics.dsl/index(arrow.optics.typeclasses/Index<#B, #C, #D>, #C): arrow.optics/PTraversal<#A, #A, #D, #D> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,0:1,0:1>(arrow.optics.typeclasses.Index<0:1,0:2,0:3>;0:2){0§;1§;2§;3§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics.typeclasses/At<#A, #B, arrow.core/Option<#C>>).arrow.optics.typeclasses/remove(#A, #B): #A // arrow.optics.typeclasses/remove|remove@arrow.optics.typeclasses.At<0:0,0:1,arrow.core.Option<0:2>>(0:0;0:1){0§;1§;2§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics.typeclasses/At<#A, #B, arrow.core/Option<#C>>).arrow.optics.typeclasses/remove(#B): kotlin/Function1<#A, #A> // arrow.optics.typeclasses/remove|remove@arrow.optics.typeclasses.At<0:0,0:1,arrow.core.Option<0:2>>(0:1){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/PLens<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/at(#B): arrow.optics/PLens<#A, #A, arrow.core/Option<#C>, arrow.core/Option<#C>> // arrow.optics.dsl/at|at@arrow.optics.PLens<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(0:1){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/at(#B): arrow.optics/POptional<#A, #A, arrow.core/Option<#C>, arrow.core/Option<#C>> // arrow.optics.dsl/at|at@arrow.optics.POptional<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(0:1){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/index(#B): arrow.optics/POptional<#A, #A, #C, #C> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(0:1){0§;1§;2§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, #B, #B>).arrow.optics.dsl/every(arrow.optics/PTraversal<#B, #B, #C, #C>): arrow.optics/PTraversal<#A, #A, #C, #C> // arrow.optics.dsl/every|every@arrow.optics.PTraversal<0:0,0:0,0:1,0:1>(arrow.optics.PTraversal<0:1,0:1,0:2,0:2>){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/at(#B): arrow.optics/PTraversal<#A, #A, arrow.core/Option<#C>, arrow.core/Option<#C>> // arrow.optics.dsl/at|at@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(0:1){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/filter(kotlin/Function1<#B, kotlin/Boolean>): arrow.optics/PTraversal<#A, #A, #C, #C> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(kotlin.Function1<0:1,kotlin.Boolean>){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?, #C: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/Map<#B, #C>, kotlin.collections/Map<#B, #C>>).arrow.optics.dsl/index(#B): arrow.optics/PTraversal<#A, #A, #C, #C> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(0:1){0§;1§;2§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PLens<#A, #A, kotlin.collections/Set<#B>, kotlin.collections/Set<#B>>).arrow.optics.dsl/at(#B): arrow.optics/PLens<#A, #A, kotlin/Boolean, kotlin/Boolean> // arrow.optics.dsl/at|at@arrow.optics.PLens<0:0,0:0,kotlin.collections.Set<0:1>,kotlin.collections.Set<0:1>>(0:1){0§;1§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PLens<#B, #B, kotlin.collections/List<#A>, kotlin.collections/List<#A>>).arrow.optics/get(kotlin/Int): arrow.optics/POptional<#B, #B, #A, #A> // arrow.optics/get|get@arrow.optics.PLens<0:1,0:1,kotlin.collections.List<0:0>,kotlin.collections.List<0:0>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/POptional<#A, #A, arrow.core/NonEmptyList<#B>, arrow.core/NonEmptyList<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/POptional<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,arrow.core.NonEmptyList<0:1>,arrow.core.NonEmptyList<0:1>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin.collections/List<#B>, kotlin.collections/List<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/POptional<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,kotlin.collections.List<0:1>,kotlin.collections.List<0:1>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin.collections/Set<#B>, kotlin.collections/Set<#B>>).arrow.optics.dsl/at(#B): arrow.optics/POptional<#A, #A, kotlin/Boolean, kotlin/Boolean> // arrow.optics.dsl/at|at@arrow.optics.POptional<0:0,0:0,kotlin.collections.Set<0:1>,kotlin.collections.Set<0:1>>(0:1){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin.sequences/Sequence<#B>, kotlin.sequences/Sequence<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/POptional<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,kotlin.sequences.Sequence<0:1>,kotlin.sequences.Sequence<0:1>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, arrow.core/NonEmptyList<#B>, arrow.core/NonEmptyList<#B>>).arrow.optics.dsl/filter(kotlin/Function1): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,arrow.core.NonEmptyList<0:1>,arrow.core.NonEmptyList<0:1>>(kotlin.Function1){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, arrow.core/NonEmptyList<#B>, arrow.core/NonEmptyList<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,arrow.core.NonEmptyList<0:1>,arrow.core.NonEmptyList<0:1>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/List<#B>, kotlin.collections/List<#B>>).arrow.optics.dsl/filter(kotlin/Function1): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.List<0:1>,kotlin.collections.List<0:1>>(kotlin.Function1){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/List<#B>, kotlin.collections/List<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.List<0:1>,kotlin.collections.List<0:1>>(kotlin.Int){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.collections/Set<#B>, kotlin.collections/Set<#B>>).arrow.optics.dsl/at(#B): arrow.optics/PTraversal<#A, #A, kotlin/Boolean, kotlin/Boolean> // arrow.optics.dsl/at|at@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Set<0:1>,kotlin.collections.Set<0:1>>(0:1){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.sequences/Sequence<#B>, kotlin.sequences/Sequence<#B>>).arrow.optics.dsl/filter(kotlin/Function1): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,kotlin.sequences.Sequence<0:1>,kotlin.sequences.Sequence<0:1>>(kotlin.Function1){0§;1§}[0] +final fun <#A: kotlin/Any?, #B: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin.sequences/Sequence<#B>, kotlin.sequences/Sequence<#B>>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/PTraversal<#A, #A, #B, #B> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,kotlin.sequences.Sequence<0:1>,kotlin.sequences.Sequence<0:1>>(kotlin.Int){0§;1§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?> arrow.optics/Optional(kotlin/Function1<#A, arrow.core/Option<#B>>, kotlin/Function2<#A, #B, #A>): arrow.optics/POptional<#A, #A, #B, #B> // arrow.optics/Optional|Optional(kotlin.Function1<0:0,arrow.core.Option<0:1>>;kotlin.Function2<0:0,0:1,0:0>){0§;1§}[0] final fun <#A: kotlin/Any?, #B: kotlin/Any?> arrow.optics/Prism(kotlin/Function1<#A, arrow.core/Option<#B>>, kotlin/Function1<#B, #A>): arrow.optics/PPrism<#A, #A, #B, #B> // arrow.optics/Prism|Prism(kotlin.Function1<0:0,arrow.core.Option<0:1>>;kotlin.Function1<0:1,0:0>){0§;1§}[0] final fun <#A: kotlin/Any?> (#A).arrow.optics/cons(kotlin.collections/List<#A>): kotlin.collections/List<#A> // arrow.optics/cons|cons@0:0(kotlin.collections.List<0:0>){0§}[0] final fun <#A: kotlin/Any?> (#A).arrow.optics/copy(kotlin/Function1, kotlin/Unit>): #A // arrow.optics/copy|copy@0:0(kotlin.Function1,kotlin.Unit>){0§}[0] +final fun <#A: kotlin/Any?> (arrow.optics/POptional<#A, #A, kotlin/String, kotlin/String>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/POptional<#A, #A, kotlin/Char, kotlin/Char> // arrow.optics.dsl/index|index@arrow.optics.POptional<0:0,0:0,kotlin.String,kotlin.String>(kotlin.Int){0§}[0] +final fun <#A: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin/String, kotlin/String>).arrow.optics.dsl/filter(kotlin/Function1): arrow.optics/PTraversal<#A, #A, kotlin/Char, kotlin/Char> // arrow.optics.dsl/filter|filter@arrow.optics.PTraversal<0:0,0:0,kotlin.String,kotlin.String>(kotlin.Function1){0§}[0] +final fun <#A: kotlin/Any?> (arrow.optics/PTraversal<#A, #A, kotlin/String, kotlin/String>).arrow.optics.dsl/index(kotlin/Int): arrow.optics/PTraversal<#A, #A, kotlin/Char, kotlin/Char> // arrow.optics.dsl/index|index@arrow.optics.PTraversal<0:0,0:0,kotlin.String,kotlin.String>(kotlin.Int){0§}[0] final fun <#A: kotlin/Any?> (kotlin.collections/List<#A>).arrow.optics/snoc(#A): kotlin.collections/List<#A> // arrow.optics/snoc|snoc@kotlin.collections.List<0:0>(0:0){0§}[0] final fun <#A: kotlin/Any?> (kotlin.collections/List<#A>).arrow.optics/uncons(): kotlin/Pair<#A, kotlin.collections/List<#A>>? // arrow.optics/uncons|uncons@kotlin.collections.List<0:0>(){0§}[0] final fun <#A: kotlin/Any?> (kotlin.collections/List<#A>).arrow.optics/unsnoc(): kotlin/Pair, #A>? // arrow.optics/unsnoc|unsnoc@kotlin.collections.List<0:0>(){0§}[0] @@ -275,8 +297,20 @@ final object arrow.optics/Every { // arrow.optics/Every|null[0] final fun <#A1: kotlin/Any?> tuple9(): arrow.optics/PTraversal, arrow.core/Tuple9<#A1, #A1, #A1, #A1, #A1, #A1, #A1, #A1, #A1>, #A1, #A1> // arrow.optics/Every.tuple9|tuple9(){0§}[0] final fun string(): arrow.optics/PTraversal // arrow.optics/Every.string|string(){}[0] } +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,arrow.core.Either<0:1,0:2>,arrow.core.Either<0:1,0:2>>{0§;1§;2§}every[0] + final fun <#A1: kotlin/Any?, #B1: kotlin/Any?, #C1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, arrow.core/Either<#B1, #C1>, arrow.core/Either<#B1, #C1>>).(): arrow.optics/PTraversal<#A1, #A1, #C1, #C1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,arrow.core.Either<0:1,0:2>,arrow.core.Either<0:1,0:2>>(){0§;1§;2§}[0] +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,arrow.core.NonEmptyList<0:1>,arrow.core.NonEmptyList<0:1>>{0§;1§}every[0] + final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, arrow.core/NonEmptyList<#B1>, arrow.core/NonEmptyList<#B1>>).(): arrow.optics/PTraversal<#A1, #A1, #B1, #B1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,arrow.core.NonEmptyList<0:1>,arrow.core.NonEmptyList<0:1>>(){0§;1§}[0] +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,arrow.core.Option<0:1>,arrow.core.Option<0:1>>{0§;1§}every[0] + final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, arrow.core/Option<#B1>, arrow.core/Option<#B1>>).(): arrow.optics/PTraversal<#A1, #A1, #B1, #B1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,arrow.core.Option<0:1>,arrow.core.Option<0:1>>(){0§;1§}[0] +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,kotlin.String,kotlin.String>{0§}every[0] + final fun <#A1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, kotlin/String, kotlin/String>).(): arrow.optics/PTraversal<#A1, #A1, kotlin/Char, kotlin/Char> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,kotlin.String,kotlin.String>(){0§}[0] final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.List<0:1>,kotlin.collections.List<0:1>>{0§;1§}every[0] final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, kotlin.collections/List<#B1>, kotlin.collections/List<#B1>>).(): arrow.optics/PTraversal<#A1, #A1, #B1, #B1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.List<0:1>,kotlin.collections.List<0:1>>(){0§;1§}[0] +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>{0§;1§;2§}every[0] + final fun <#A1: kotlin/Any?, #B1: kotlin/Any?, #C1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, kotlin.collections/Map<#B1, #C1>, kotlin.collections/Map<#B1, #C1>>).(): arrow.optics/PTraversal<#A1, #A1, #C1, #C1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,kotlin.collections.Map<0:1,0:2>,kotlin.collections.Map<0:1,0:2>>(){0§;1§;2§}[0] +final val arrow.optics.dsl/every // arrow.optics.dsl/every|@arrow.optics.PTraversal<0:0,0:0,kotlin.sequences.Sequence<0:1>,kotlin.sequences.Sequence<0:1>>{0§;1§}every[0] + final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> (arrow.optics/PTraversal<#A1, #A1, kotlin.sequences/Sequence<#B1>, kotlin.sequences/Sequence<#B1>>).(): arrow.optics/PTraversal<#A1, #A1, #B1, #B1> // arrow.optics.dsl/every.|@arrow.optics.PTraversal<0:0,0:0,kotlin.sequences.Sequence<0:1>,kotlin.sequences.Sequence<0:1>>(){0§;1§}[0] final val arrow.optics.dsl/left // arrow.optics.dsl/left|@arrow.optics.POptional<0:0,0:0,arrow.core.Either<0:1,0:2>,arrow.core.Either<0:1,0:2>>{0§;1§;2§}left[0] final inline fun <#A1: kotlin/Any?, #B1: kotlin/Any?, #C1: kotlin/Any?> (arrow.optics/POptional<#A1, #A1, arrow.core/Either<#B1, #C1>, arrow.core/Either<#B1, #C1>>).(): arrow.optics/POptional<#A1, #A1, #B1, #B1> // arrow.optics.dsl/left.|@arrow.optics.POptional<0:0,0:0,arrow.core.Either<0:1,0:2>,arrow.core.Either<0:1,0:2>>(){0§;1§;2§}[0] final val arrow.optics.dsl/left // arrow.optics.dsl/left|@arrow.optics.PPrism<0:0,0:0,arrow.core.Either<0:1,0:2>,arrow.core.Either<0:1,0:2>>{0§;1§;2§}left[0] diff --git a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/at.kt b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/at.kt index 4ea746447b1..c70e4c42ee2 100644 --- a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/at.kt +++ b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/at.kt @@ -1,10 +1,12 @@ package arrow.optics.dsl +import arrow.core.Option import arrow.optics.Lens import arrow.optics.Optional import arrow.optics.Prism import arrow.optics.Traversal import arrow.optics.typeclasses.At +import kotlin.jvm.JvmName /** * DSL to compose [At] with a [Lens] for a structure [S] to focus in on [A] at given index [I]. @@ -35,3 +37,25 @@ public fun Optional.at(at: At, i: I): Optional * @return [Traversal] with a focus in [A] at given index [I]. */ public fun Traversal.at(at: At, i: I): Traversal = this.compose(at.at(i)) + +public fun Lens>.at(key: K): Lens> = + this.compose(At.map().at(key)) + +public fun Optional>.at(key: K): Optional> = + this.compose(At.map().at(key)) + +public fun Traversal>.at(key: K): Traversal> = + this.compose(At.map().at(key)) + +@JvmName("atSet") +public fun Lens>.at(value: A): Lens = + this.compose(At.set().at(value)) + +@JvmName("atSet") +public fun Optional>.at(value: A): Optional = + this.compose(At.set().at(value)) + +@JvmName("atSet") +public fun Traversal>.at(value: A): Traversal = + this.compose(At.set().at(value)) + diff --git a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/every.kt b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/every.kt index c43f3cfa48e..05b2cb2e61d 100644 --- a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/every.kt +++ b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/every.kt @@ -1,7 +1,12 @@ package arrow.optics.dsl +import arrow.core.Either +import arrow.core.NonEmptyList +import arrow.core.Option import arrow.optics.Every +import arrow.optics.Optional import arrow.optics.Traversal +import kotlin.jvm.JvmName /** * DSL to compose [Traversal] with a [Traversal] for a structure [S] to see all its foci [A] @@ -14,3 +19,27 @@ public fun Traversal.every(tr: Traversal): Traversal public val Traversal>.every: Traversal get() = this.compose(Every.list()) + +@get:JvmName("everyRight") +public val Traversal>.every: Traversal + get() = this.compose(Every.either()) + +@get:JvmName("everyValue") +public val Traversal>.every: Traversal + get() = this.compose(Every.map()) + +@get:JvmName("everyNonEmptyList") +public val Traversal>.every: Traversal + get() = this.compose(Every.nonEmptyList()) + +@get:JvmName("everySome") +public val Traversal>.every: Traversal + get() = this.compose(Every.option()) + +@get:JvmName("everySequence") +public val Traversal>.every: Traversal + get() = this.compose(Every.sequence()) + +@get:JvmName("everyChar") +public val Traversal.every: Traversal + get() = this.compose(Every.string()) diff --git a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/filterIndex.kt b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/filterIndex.kt new file mode 100644 index 00000000000..8e344298d95 --- /dev/null +++ b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/filterIndex.kt @@ -0,0 +1,38 @@ +package arrow.optics.dsl + +import arrow.core.NonEmptyList +import arrow.core.Predicate +import arrow.optics.Optional +import arrow.optics.Traversal +import arrow.optics.typeclasses.FilterIndex +import kotlin.jvm.JvmName + +/** + * DSL to compose [FilterIndex] with an [Traversal] for a structure [S] to focus in on [A] at given index [I] + * + * @receiver [Optional] with a focus in [S] + * @param filter [FilterIndex] instance to provide a [Optional] to focus into [S] at [I] + * @param i index [I] to focus into [S] and find focus [A] + * @return [Optional] with a focus in [A] at given index [I] + */ +public fun Traversal.filter(filter: FilterIndex, predicate: Predicate): Traversal = + this.compose(filter.filter(predicate)) + +public fun Traversal>.filter(predicate: Predicate): Traversal = + this.compose(FilterIndex.list().filter(predicate)) + +@JvmName("filterNonEmptyList") +public fun Traversal>.filter(predicate: Predicate): Traversal = + this.compose(FilterIndex.nonEmptyList().filter(predicate)) + +@JvmName("filterSequence") +public fun Traversal>.filter(predicate: Predicate): Traversal = + this.compose(FilterIndex.sequence().filter(predicate)) + +@JvmName("filterValues") +public fun Traversal>.filter(predicate: Predicate): Traversal = + this.compose(FilterIndex.map().filter(predicate)) + +@JvmName("filterChars") +public fun Traversal.filter(predicate: Predicate): Traversal = + this.compose(FilterIndex.string().filter(predicate)) diff --git a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/index.kt b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/index.kt index ca7ff58db85..d42c67b6a2d 100644 --- a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/index.kt +++ b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/dsl/index.kt @@ -1,10 +1,12 @@ package arrow.optics.dsl +import arrow.core.NonEmptyList import arrow.optics.Lens import arrow.optics.Optional import arrow.optics.Prism import arrow.optics.Traversal import arrow.optics.typeclasses.Index +import kotlin.jvm.JvmName /** * DSL to compose [Index] with an [Optional] for a structure [S] to focus in on [A] at given index [I] @@ -25,3 +27,41 @@ public fun Optional.index(idx: Index, i: I): Optiona * @return [Traversal] with a focus in [A] at given index [I]. */ public fun Traversal.index(idx: Index, i: I): Traversal = this.compose(idx.index(i)) + +public fun Optional>.index(index: Int): Optional = + this.compose(Index.list().index(index)) + +public fun Traversal>.index(index: Int): Traversal = + this.compose(Index.list().index(index)) + +@JvmName("indexNonEmptyList") +public fun Optional>.index(index: Int): Optional = + this.compose(Index.nonEmptyList().index(index)) + +@JvmName("indexNonEmptyList") +public fun Traversal>.index(index: Int): Traversal = + this.compose(Index.nonEmptyList().index(index)) + +@JvmName("indexValues") +public fun Optional>.index(key: K): Optional = + this.compose(Index.map().index(key)) + +@JvmName("indexValues") +public fun Traversal>.index(key: K): Traversal = + this.compose(Index.map().index(key)) + +@JvmName("indexSequence") +public fun Optional>.index(index: Int): Optional = + this.compose(Index.sequence().index(index)) + +@JvmName("indexSequence") +public fun Traversal>.index(index: Int): Traversal = + this.compose(Index.sequence().index(index)) + +@JvmName("indexString") +public fun Optional.index(index: Int): Optional = + this.compose(Index.string().index(index)) + +@JvmName("indexString") +public fun Traversal.index(index: Int): Traversal = + this.compose(Index.string().index(index)) diff --git a/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/AtSyntaxTest.kt b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/AtSyntaxTest.kt new file mode 100644 index 00000000000..c7178a169fa --- /dev/null +++ b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/AtSyntaxTest.kt @@ -0,0 +1,60 @@ +package arrow.optics.dsl + +import arrow.core.None +import kotlin.test.Test +import kotlin.test.assertEquals + +class AtSyntaxTest { + + @Test + fun mapModify() { + val original = mapOf("one" to 1, "two" to 2) + val expected = Wrapper(original.mapValues { (k, i) -> + if (k == "one") i + 1 else i + }) + val actual = Wrapper.lens>() + .at("one") + .some + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun mapRemove() { + val original = mapOf("one" to 1, "two" to 2) + val expected = Wrapper(original - "one") + val actual = Wrapper.lens>() + .at("one") + .set(Wrapper(original), None) + assertEquals(expected, actual) + } + + fun setKeep() { + val original = setOf(1) + val expected = Wrapper(setOf(1, 2)) + val actual = Wrapper.lens>() + .at(2) + .set(Wrapper(original), false) + assertEquals(expected, actual) + } + + @Test + fun setRemove() { + val original = setOf(1) + val expected = Wrapper(setOf(1, 2)) + val actual = Wrapper.lens>() + .at(2) + .set(Wrapper(original), true) + assertEquals(expected, actual) + } + + @Test + fun setFilter() { + val original = setOf(1) + val expected = Wrapper(emptySet()) + val actual = Wrapper.lens>() + .at(1) + .set(Wrapper(original), false) + assertEquals(expected, actual) + } +} diff --git a/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/EverySyntaxTest.kt b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/EverySyntaxTest.kt new file mode 100644 index 00000000000..de9894af25f --- /dev/null +++ b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/EverySyntaxTest.kt @@ -0,0 +1,103 @@ +package arrow.optics.dsl + +import arrow.core.* +import arrow.optics.Lens +import kotlin.jvm.JvmInline +import kotlin.test.Test +import kotlin.test.assertEquals + +class EverySyntaxTest { + + @Test + fun list() { + val original = listOf(1, 2) + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun either_right() { + val original: Either = 1.right() + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun either_left() { + val original: Either = "one".left() + val expected = Wrapper(original) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun map() { + val original = mapOf("one" to 1, "two" to 2) + val expected = Wrapper(original.mapValues { (_, i) -> i + 1 }) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun nonEmptyList() { + val original = nonEmptyListOf(1, 2) + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun some() { + val original = 1.some() + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun none() { + val original = none() + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected, actual) + } + + @Test + fun sequence() { + val original = sequenceOf(1, 2) + val expected = Wrapper(original.map(Int::inc)) + val actual = Wrapper.lens>() + .every + .modify(Wrapper(original), Int::inc) + assertEquals(expected.value.toList(), actual.value.toList()) + } + + private fun String.mapEach(block: (Char) -> Char): String = + map(block).joinToString(separator = "") + + @Test + fun string() { + val original = "abc" + val expected = Wrapper(original.mapEach(Char::titlecaseChar)) + val actual = Wrapper.lens() + .every + .modify(Wrapper(original), Char::titlecaseChar) + assertEquals(expected, actual) + } +} diff --git a/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/Wrapper.kt b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/Wrapper.kt new file mode 100644 index 00000000000..526cfae40b7 --- /dev/null +++ b/arrow-libs/optics/arrow-optics/src/commonTest/kotlin/arrow/optics/dsl/Wrapper.kt @@ -0,0 +1,13 @@ +package arrow.optics.dsl + +import arrow.optics.Lens +import arrow.optics.PLens +import kotlin.jvm.JvmInline + +@JvmInline +value class Wrapper(val value: A) { + companion object { + fun lens(): Lens, A> = + PLens(Wrapper::value) { _, a -> Wrapper(a) } + } +}