Option monad

  def f1(f: AnyRef) = "You"
  def f2(f: AnyRef) = "Every"
  def f2_prime(f: AnyRef): AnyRef = null 
  def f3(f: AnyRef) = "Body"
  //  def f3( f: AnyRef): AnyRef = null

  val f = "start"
  val fin = for (
    r1 <- Option { f1(f) };
    r2 <- Option { f2(f) };
    r3 <- Option { f3(f) }
  ) yield r3
  fin.foreach { res => println("YouEveryBody") }

  // equivalent to
  Option { f1(f) }.
    flatMap { r2 => Option(f2_prime(f)) }.
    flatMap { r3 => Option(f3(f)) }.
    foreach { res => println("You all every body") }

Output

YouEveryBody

Ugly in Java

  static public void main(String[] args) {
    Object r1 = args[0];
    Object r2 = f1(r1);
    if( null != r2 ) { 
      Object r3 = f2(r2);
      if( null != r3 ) { 
        Object r4 = f3(r3);
        if( null != r4 ) { 
          System.out.println("Youeverybody!");
        }   
      }   
    }   
  }