fun foldLeft(l: List,
seed: B,
func: (b: B, a: A) -> B) : B {
return when {
l.isEmpty() -> seed
else -> foldLeft(l.tail, func(seed, l.head), func)
}
}
fun foldRightOverflows(l: List,
seed: B,
func: (a: A, b: B) -> B) : B {
return when {
l.isEmpty() -> seed
else -> func(l.head, foldRightOverflows(l.tail, seed, func))
}
}
fun foldRight(l: List,
seed: T,
func: (a: T, b: T) -> T) : T {
return foldLeft(l.asReversed(), seed, func)
}