Each provides a Traversal that can focus into a structure S to see all its foci A.


Each can easily be created given a Traverse instance.

import arrow.core.*
import arrow.optics.*
import arrow.optics.typeclasses.*
import arrow.core.extensions.listk.traverse.*

val each: Each<ListKOf<Int>, Int> = Each.fromTraverse(ListK.traverse())

val listTraversal: Traversal<ListKOf<Int>, Int> = each.each()

listTraversal.lastOption(listOf(1, 2, 3).k())
// Some(3)
// None

Creating your own Each instances

Arrow provides Each instances for some common datatypes in Arrow. You can look them up by calling Each.each().

You may create instances of Each for your own datatypes, which you will be able to use as demonstrated in the example above.

See Deriving and creating custom typeclass to provide your own Each instances for custom datatypes.

Data types

Module Data types
arrow.core Either, ListK, MapK, NonEmptyList, Option, SequenceK, Try

Type Class Hierarchy

Do you like Arrow?

Arrow Org