Sunday, December 30, 2012

First Scala Monad example

So as promised here is my first scala monad example

trait Function {
  def name: String
}

case class ShellFunction(name: String) extends Function
case class ScalaFunction(name: String) extends Function

val l: List[Option[Function]] = List(None, Some(ShellFunction("build")), None)

val resultUsingForConstruct = for (
  i <- l;
  j <- i
) yield (Some(ScalaFunction(j.name)))

val resultUsingFlatMap = l flatMap {
  i: Option[Function] => i map {
    j: Function => Some(ScalaFunction(j.name))
  }
}

println("Result using for construct: " + resultUsingForConstruct)
println("Result using flatmap construct: " + resultUsingFlatMap)
Output: List(Some(ScalaFunction(build)))

As you can see flatMap removes those None's from our computation.

No comments:

Post a Comment