Monads
Let's say we have a function, X => List[Y]
. This function is transformed to another function, List[X] => List[Y]
. A higher order function that does this transformation is Monad.

Figure 9.2: Monad translation
Again, choosing the List
container for ease of understanding, we go with the following commands:
object Monad extends App { def monad[X, Y](f: X => List[Y]): List[X] => List[Y] = { def fun : (List[X]) => List[Y] = (arg: List[X]) => arg match { // 1 case Nil => Nil case x :: xs => f(x) ::: fun(xs) // 2 } fun } def f1(n: Int) = (1 to n).toList // 3 val f = monad(f1) // 4 println(f(List(7,8,9))) // 5 }
The salient points of the ...
Get Scala Functional Programming Patterns now with O’Reilly online learning.
O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.