Memoization with ZIO

April 21, 2021

ZIO tip : How to memoize the result of an effectful computation :

ZIO values are lazy and referentially transparent. So a IO[E,A] will be computed each time it needs to be evaluated.
It is a very intersting property in functional programming, but sometimes for long and cachable computations, it can be useful to memoize a result. It can be done using ZIO.memoize.

Here is an example :

val compute: Int => UIO[Int] = (x: Int) => ???
for {
      m <- ZIO.memoize(compute)
      a <- m(1)
      b <- m(1)
      c <- m(1)
      d <- m(2)
} yield(a, b, c, d)

With this code, m(1) result will only be computed 1 time.

comments powered by Disqus