February 2018
Intermediate to advanced
350 pages
7h 35m
English
A logical complement takes any predicate (a function with a return Boolean type) and negates it. Let's look at the following code:
import arrow.core.Predicateimport arrow.syntax.function.complementfun main(args: Array<String>) { val evenPredicate: Predicate<Int> = { i: Int -> i % 2 == 0 } val oddPredicate: (Int) -> Boolean = evenPredicate.complement() val numbers: IntRange = 1..10 val evenNumbers: List<Int> = numbers.filter(evenPredicate) val oddNumbers: List<Int> = numbers.filter(oddPredicate) println(evenNumbers) println(oddNumbers)}
Notice that we use a Predicate<T> type, but it is just an alias for (T) -> Boolean. There are complement extension functions for predicates from 0 to 22 parameters.
Read now
Unlock full access