def Y[A, B](f: (A ⇒ B) ⇒ (A ⇒ B)): A ⇒ B = f(Y(f))(_) def fib(n: Int): Option[Int] = if (n < 0) None else Some(Y[Int, Int](f ⇒ i ⇒ if (i < 2) 1 else f(i - 1) + f(i - 2))(n)) -2 to 5 map (n ⇒ (n, fib(n))) foreach println