Snoc

beginner

Snoc provides a Prism between S and its init A and last element S. Snoc can be seen as the reverse of Cons, it provides a way to attach or detach elements on the end side of a structure.

It can be constructed by providing the Prism.


import arrow.core.ListK
import arrow.optics.extensions.listk.snoc.snoc
import arrow.optics.typeclasses.Snoc

val listLast = ListK.snoc<Int>().snoc()
val instance = Snoc(listLast)
instance
// arrow.optics.typeclasses.Snoc$Companion$invoke$1@4881bf03

It defines two functions snoc and unsnoc.

snoc appends an element A to a structure S.


import arrow.optics.extensions.list.snoc.snoc

listOf(1, 2).snoc(3)
// ListK(list=[1, 2, 3])

unsnoc detaches the last element A from a structure S.


import arrow.optics.extensions.list.snoc.unsnoc

listOf(1, 2, 3).unsnoc()
// Some(Tuple2(a=ListK(list=[1, 2]), b=3))

emptyList<Int>().unsnoc()
// None

Data types

Module Data types
arrow.core ListK