View functor1.scala
def map(fa: Foo[A])(f: A => B): Foo[B] = ??? |
View explicitRecursion.scala
// A function which calls itself explicitly: | |
def length[A](list: List[A]) = list match { | |
case h::t => 1 + length(t) | |
case Nil => 0 | |
} |
View list.scala
// A type which holds a reference to itself: | |
sealed abstract class List[+A] | |
final case class Cons[+A](head: A, tail: List[A]) extends List[A] | |
final case object Nil extends List[Nothing] |
View foldl.scala
List(1, 2, 3).foldl(0)(_ + _) | |
// foldl removes the explicit recursion. | |
// FOLD, REDUCE, ... already are recursion scheme |