layout | title | permalink |
---|---|---|
quickstart-optics |
Optics |
/optics/ |
Arrow Optics provides an automatic DSL that allows users to use .
notation when accessing,
composing, and transforming deeply nested immutable data structures.
Optics also offers all the base types such as [Lens]({{ "/optics/lens/" | relative_url }}), [Prism]( {{ '/optics/prism/' | relative_url }}), and others from which we can generalize accessing and traversing deep values in sealed and data classes models.s
{: .setup-subtitle} Configure Arrow for your project
Make sure to have the latest version of JDK 1.8 installed.
Arrow supports Android starting on API 21 and up.
In your project's root build.gradle.kts
, append this repository to your list:
allprojects {
repositories {
mavenCentral()
}
}
Add the dependencies into the project's build.gradle.kts
:
apply plugin: 'kotlin-kapt'
dependencies {
implementation("io.arrow-kt:arrow-optics:1.0.1")
kapt("io.arrow-kt:arrow-meta:1.0.1")
}
To avoid specifying the Arrow version for every dependency, a BOM file is available:
dependencies {
implementation(platform("io.arrow-kt:arrow-stack:1.0.1"))
implementation("io.arrow-kt:arrow-core")
implementation("io.arrow-kt:arrow-optics")
...
}
If you want to try the latest features, replace 1.0.1
with 1.0.2-SNAPSHOT
and add this
configuration:
allprojects {
repositories {
...
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
}
// To use latest artifacts
configurations.all { resolutionStrategy.cacheChangingModulesFor(0, "seconds") }
}
In your project's root build.gradle
, append this repository to your list:
allprojects {
repositories {
mavenCentral()
}
}
Add the dependencies into the project's build.gradle
:
apply plugin: 'kotlin-kapt'
def arrow_version = "1.0.1"
dependencies {
implementation "io.arrow-kt:arrow-optics:$arrow_version"
kapt "io.arrow-kt:arrow-meta:$arrow_version"
}
To avoid specifying the Arrow version for every dependency, a BOM file is available:
def arrow_version = "1.0.1"
dependencies {
implementation platform("io.arrow-kt:arrow-stack:$arrow_version")
implementation "io.arrow-kt:arrow-core"
implementation "io.arrow-kt:arrow-optics"
...
}
If you want to try the latest features, replace 1.0.1
with 1.0.2-SNAPSHOT
and add this
configuration:
allprojects {
repositories {
...
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
// To use latest artifacts
configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' }
}
Make sure to have at least the latest version of JDK 1.8 installed. Add to your pom.xml file the following properties:
<properties>
<kotlin.version>1.5.31</kotlin.version>
<arrow.version>1.0.1</arrow.version>
</properties>
Add the dependencies that you want to use:
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-core</artifactId>
<version>${arrow.version}</version>
</dependency>
For the Optics DSL, enable annotation processing using Kotlin plugin:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-meta</artifactId>
<version>${arrow.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
To avoid specifying the Arrow version for every dependency, a BOM file is available:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-stack</artifactId>
<version>${arrow.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement><dependencies>
...
</dependencies>
If you want to try the latest features, replace 1.0.1
with 1.0.2-SNAPSHOT
and add this
configuration:
<repository>
<snapshotss>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>