Skip to content

Commit b8fb379

Browse files
committed
Optics modules (arrow-kt#1492)
* Move mtl Setter ops * Move Traversal State to mtl and add docs * Move Lens Reader/State extensions to optis-mtl * Getter mtl * Prism mtl * Split arrow-optics into arrow-optics-core * Optional kdocs * Fix docs * Merge arrow-optics and arrow-optics-core * Fix docs
1 parent 5639f2a commit b8fb379

File tree

33 files changed

+1262
-398
lines changed

33 files changed

+1262
-398
lines changed

modules/core/arrow-test/src/main/kotlin/arrow/test/laws/PrismLaws.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import arrow.core.extensions.id.applicative.applicative
1111
import arrow.core.orElse
1212
import arrow.core.value
1313
import arrow.optics.Prism
14-
import arrow.optics.modify
1514
import arrow.typeclasses.Const
1615
import arrow.typeclasses.Eq
1716
import arrow.typeclasses.Monoid

modules/docs/arrow-docs/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies {
1414
compile project(':arrow-fx')
1515
compile project(':arrow-fx-rx2')
1616
compile project(':arrow-fx-reactor')
17-
compile project(':arrow-optics')
17+
compile project(':arrow-optics-mtl')
1818
compile project(':arrow-validation')
1919
compile project(':arrow-recursion')
2020
compile project(':arrow-integrations-retrofit-adapter')

modules/docs/arrow-docs/docs/docs/optics/getter/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ val tupleGetter: Getter<Tuple2<String, Int>, String> = Tuple2.first<String, Int>
4747
`Getter` also has some convenience methods to make working with [Reader]({{ '/docs/arrow/data/reader' | relative_url }}) easier.
4848

4949
```kotlin:ank
50+
import arrow.optics.mtl.*
5051
import arrow.mtl.*
5152
5253
val reader: Reader<NonEmptyList<String>, String> = NonEmptyList.head<String>().asGetter().ask()
@@ -64,6 +65,7 @@ NonEmptyList.head<String>().asGetter().asks(String::decapitalize)
6465
There are also some convenience methods to make working with [State]({{ '/docs/arrow/data/state' | relative_url }}) easier.
6566

6667
```kotlin:ank
68+
import arrow.optics.mtl.*
6769
import arrow.mtl.*
6870
6971
val inspectHealth = healthGetter.extract()

modules/docs/arrow-docs/docs/docs/optics/lens/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ liftF(player)
6363
There are also some convenience methods to make working with [Reader]({{ '/docs/arrow/data/reader' | relative_url }}) easier.
6464

6565
```kotlin:ank
66+
import arrow.optics.mtl.*
6667
import arrow.mtl.*
6768
6869
val reader: Reader<Player, Int> = playerLens.ask()

modules/docs/arrow-docs/docs/docs/optics/setter/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ There are also some convenience methods to make working with [State]({{ '/docs/a
5858
This can make working with nested structures in stateful computations significantly more elegant.
5959

6060
```kotlin:ank
61+
import arrow.optics.mtl.*
62+
6163
val takeDamage = playerSetter.update_ { it - 15 }
6264
takeDamage.run(Player(75))
6365
```

modules/docs/arrow-docs/docs/docs/optics/traversal/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ There are also some convenience methods to make working with [State]({{ '/docs/a
6565
This can make working with nested structures in stateful computations significantly more elegant.
6666

6767
```kotlin:ank
68+
import arrow.optics.mtl.*
69+
6870
data class Enemy(val health: Int)
6971
val battlefield = listOf(Enemy(70), Enemy(80), Enemy(65)).k()
7072
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package `arrow`.`ap`.`objects`.`iso`
22

3+
import arrow.core.Option
4+
import arrow.core.Tuple3
5+
import arrow.optics.Iso
36

4-
5-
inline val `arrow`.`ap`.`objects`.`iso`.`Iso`.Companion.iso: arrow.optics.Iso<`arrow`.`ap`.`objects`.`iso`.`Iso`, arrow.core.Tuple3<`kotlin`.`String`, `kotlin`.`String`?, `arrow`.`core`.`Option`<`kotlin`.`String`>>> inline get()= arrow.optics.Iso(
6-
get = { iso: `arrow`.`ap`.`objects`.`iso`.`Iso` -> arrow.core.Tuple3(iso.`field`, iso.`nullable`, iso.`option`) },
7-
reverseGet = { tuple: arrow.core.Tuple3<`kotlin`.`String`, `kotlin`.`String`?, `arrow`.`core`.`Option`<`kotlin`.`String`>> -> `arrow`.`ap`.`objects`.`iso`.`Iso`(tuple.a, tuple.b, tuple.c) }
8-
)
7+
inline val `arrow`.`ap`.`objects`.`iso`.`Iso`.Companion.iso: Iso<`Iso`, Tuple3<`String`, `String`?, `Option`<`String`>>>
8+
inline get()= Iso(
9+
get = { iso: `Iso` -> Tuple3(iso.`field`, iso.`nullable`, iso.`option`) },
10+
reverseGet = { tuple: Tuple3<`String`, `String`?, `Option`<`String`>> -> `Iso`(tuple.a, tuple.b, tuple.c) }
11+
)
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package `arrow`.`ap`.`objects`.`iso`
22

3+
import arrow.core.Tuple2
4+
import arrow.optics.Iso
35

4-
5-
inline val `arrow`.`ap`.`objects`.`iso`.`IsoSecondaryConstructor`.Companion.iso: arrow.optics.Iso<`arrow`.`ap`.`objects`.`iso`.`IsoSecondaryConstructor`, arrow.core.Tuple2<`kotlin`.`Int`, `kotlin`.`String`>> inline get()= arrow.optics.Iso(
6-
get = { isoSecondaryConstructor: `arrow`.`ap`.`objects`.`iso`.`IsoSecondaryConstructor` -> arrow.core.Tuple2(isoSecondaryConstructor.`fieldNumber`, isoSecondaryConstructor.`fieldString`) },
7-
reverseGet = { tuple: arrow.core.Tuple2<`kotlin`.`Int`, `kotlin`.`String`> -> `arrow`.`ap`.`objects`.`iso`.`IsoSecondaryConstructor`(tuple.a, tuple.b) }
8-
)
6+
inline val `arrow`.`ap`.`objects`.`iso`.`IsoSecondaryConstructor`.Companion.iso: Iso<`IsoSecondaryConstructor`, Tuple2<`Int`, `String`>>
7+
inline get()= Iso(
8+
get = { isoSecondaryConstructor: `IsoSecondaryConstructor` -> Tuple2(isoSecondaryConstructor.`fieldNumber`, isoSecondaryConstructor.`fieldString`) },
9+
reverseGet = { tuple: Tuple2<`Int`, `String`> -> `IsoSecondaryConstructor`(tuple.a, tuple.b) }
10+
)
Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
package `arrow`.`ap`.`objects`.`prism`
22

3-
import arrow.core.left
4-
import arrow.core.right
53
import arrow.core.identity
4+
import arrow.optics.Prism
65

7-
inline val `arrow`.`ap`.`objects`.`prism`.`Prism`.Companion.prismSealed1: arrow.optics.Prism<`arrow`.`ap`.`objects`.`prism`.`Prism`, arrow.ap.objects.prism.Prism.PrismSealed1> inline get()= arrow.optics.Prism(
8-
getOrModify = { prism: `arrow`.`ap`.`objects`.`prism`.`Prism` ->
9-
when (prism) {
10-
is arrow.ap.objects.prism.Prism.PrismSealed1 -> prism.right()
11-
else -> prism.left()
12-
}
13-
},
14-
reverseGet = ::identity
15-
)
6+
inline val `arrow`.`ap`.`objects`.`prism`.`Prism`.Companion.prismSealed1: Prism<`Prism`, Prism.PrismSealed1>
7+
inline get()= Prism(
8+
getOrModify = { prism: `Prism` ->
9+
when (prism) {
10+
is Prism.PrismSealed1 -> prism.right()
11+
else -> prism.left()
12+
}
13+
},
14+
reverseGet = ::identity
15+
)
1616

1717

18-
inline val `arrow`.`ap`.`objects`.`prism`.`Prism`.Companion.prismSealed2: arrow.optics.Prism<`arrow`.`ap`.`objects`.`prism`.`Prism`, arrow.ap.objects.prism.Prism.PrismSealed2> inline get()= arrow.optics.Prism(
19-
getOrModify = { prism: `arrow`.`ap`.`objects`.`prism`.`Prism` ->
20-
when (prism) {
21-
is arrow.ap.objects.prism.Prism.PrismSealed2 -> prism.right()
22-
else -> prism.left()
23-
}
24-
},
25-
reverseGet = ::identity
26-
)
18+
inline val `arrow`.`ap`.`objects`.`prism`.`Prism`.Companion.prismSealed2: Prism<`Prism`, Prism.PrismSealed2>
19+
inline get()= Prism(
20+
getOrModify = { prism: `Prism` ->
21+
when (prism) {
22+
is Prism.PrismSealed2 -> prism.right()
23+
else -> prism.left()
24+
}
25+
},
26+
reverseGet = ::identity
27+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apply plugin: 'kotlin-kapt'
2+
3+
dependencies {
4+
compile project(':arrow-mtl-data')
5+
compile project(':arrow-optics')
6+
}
7+
8+
apply from: rootProject.file('gradle/gradle-mvn-push.gradle')

0 commit comments

Comments
 (0)