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!");
}
}
}
}