2018 01 05 Arrow

Λrrow - Functional Programming for Kotlin

2018 01 05 Arrow

Image credit


Λrrow is a functional programming library for the Kotlin programming language born from the fusion of KΛTEGORY and funKTionale.

Kategory and Funktionale were the two most relevant FP libraries for Kotlin in 2017.

The two groups of maintainers decided to join forces after encountering both users and companies in the Scala community who were facing issues with scalaz and cats while working on industry projects. The goal was to merge into a single library that would provide users in Kotlin with a unified and reasonable approach to typed FP that avoids issues related to split libraries and binary incompatibilities between data types and type classes for users.

Image credit


Now the KΛTEGORY and funKTionale libraries have united forces and made the necessary changes required to bring these two communities together in the spirit of a better FP ecosystem for everyone in Kotlin.

Arrow is built from the ground up as a modular library that allows users to pick and choose what features interest them the most.

At the time of the current release 0.5.5 the following modules are available:


Arrow Core

compile 'io.arrow-kt:arrow-core:0.5.5'

Basic data types such as Option, Either, and others are part of the foundation that Arrow is built on.


Arrow Data

compile 'io.arrow-kt:arrow-data:0.5.5'

Advanced data types such as Kleisli, EitherT, etc.


Arrow Type classes

compile 'io.arrow-kt:arrow-typeclasses:0.5.5'

FP type classes Functor, Applicative, Monad, etc.


Arrow Instances

compile 'io.arrow-kt:arrow-instances:0.5.5'

Implicit instances for all the Arrow data types providing instances of the FP type classes


Arrow Free

compile 'io.arrow-kt:arrow-free:0.5.5'
Free data structures, Free and FreeApplicative, Cofree, etc.

Arrow MTL

compile 'io.arrow-kt:arrow-mtl:0.5.5'
MTL type classes that allow for the abstraction of monad transformers. FunctorFilter, MonadReader, etc.

Arrow Effects

compile 'io.arrow-kt:arrow-effects:0.5.5'
Arrow’s IO data type and related type classes abstract away effect handling and async behaviors.

Arrow Effects RX2

compile 'io.arrow-kt:arrow-effects-rx2:0.5.5'
Instances and utilities to work with RX in a more functional style.

Arrow Optics

compile 'io.arrow-kt:arrow-optics:0.5.5'
Lenses, Prisms, Iso, and more data types and type classes to work with immutable data structures such as data classes or sealed families.

Arrow Syntax

compile 'io.arrow-kt:arrow-syntax:0.5.5'
Syntax facilities derived from data types and type class evidences over the std lib data types.