val s = "Hello" val x = s.reverse val r1 = f(x) val r2 = g(x)
val s = "Hello" val r1 = f(s.reverse) val r2 = g(s.reverse)
Regardless of the implementations of f and g, these two programs are (extensionally) equivalent.
Therefore, reverse is referentially transparent.