Arrow is composed of 4 main modular libraries
Arrow Core includes types such as Either
, Validated
and many extensions to Iterable
that can be used when implementing error handling patterns.
Core also includes the base continuation effects system, which includes patterns to remove callbacks and enables controlled effects in direct syntax. Some applications of the effect system reduce boilerplate and enable direct syntax including monad comprehensions and computation expressions.
Arrow Fx is a full-featured, high-performance, asynchronous framework that brings functional operators to Kotlin’s suspend
functions.
By leveraging the power of KotlinX Coroutines and the compiler support for CPS transformations, Arrow Fx results in optimal async programs with increased throughput and decreased allocations.
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.
Arrow Meta is a general purpose library for meta-programming in Kotlin to build compiler plugins. Some type system features proposed by Arrow such as union types, product types, proof derivation, and others are built with Arrow Meta and serve as examples of what could be incorporated in the Kotlin compiler.
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
:
dependencies {
implementation("io.arrow-kt:arrow-core:1.0.1")
}
apply plugin: 'com.google.devtools.ksp'
dependencies {
implementation("io.arrow-kt:arrow-optics:1.0.1")
ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion")
}
here is an example repository https://github.com/arrow-kt/Arrow-JVM-Template/tree/optics-setup.
dependencies {
implementation("io.arrow-kt:arrow-fx-coroutines: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-fx-coroutines")
...
}
If you want to try the latest features, replace 1.0.1
with the latest alpha
release.
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
:
def arrow_version = "1.0.1"
dependencies {
implementation "io.arrow-kt:arrow-core:$arrow_version"
}
apply plugin: 'com.google.devtools.ksp'
dependencies {
implementation "io.arrow-kt:arrow-optics:1.0.1"
ksp "io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion"
}
here is an example repository https://github.com/arrow-kt/Arrow-JVM-Template/tree/optics-setup.
def arrow_version = "1.0.1"
dependencies {
implementation "io.arrow-kt:arrow-fx-coroutines:$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-fx-coroutines"
...
}
If you want to try the latest features, replace 1.0.1
with the latest alpha
release.
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.6.10</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>
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>
If you want to try the latest features, replace 1.0.1
with the latest alpha
release.
Do you like Arrow?
✖