Maven Central Latest snapshot Kotlin version License StackOverflow Twitter

Arrow Optics. Transforming and computing over immutable data models in Kotlin

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, Prism, and others from which we can generalize accessing and traversing deep values in sealed and data classes models.s

Arrow Optics Overview

Setup

Configure Arrow for your project

Jdk

Make sure to have the latest version of JDK 1.8 installed.

Android

Arrow supports Android starting on API 21 and up.

Basic Setup

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")
}

BOM file

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")
    ...
}

Next development version

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") }
}

Basic Setup

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"
}

BOM file

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"
    ...
}

Next development version

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' }
}

Basic Setup

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>

Enabling kapt for the Optics DSL

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>

BOM file

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>

Next development version

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>

Do you like Arrow?

Arrow Org
<