Generador de números aleatorios funcionales puros - mónada estatal

El libro 'Programación Funcional en Scala'muestra un ejemplo de generador de números aleatorios funcionales puros como se muestra a continuación

trait RNG {
    def nextInt: (Int, RNG)
}

object RNG {
    def simple(seed: Long): RNG = new RNG {
        def nextInt = {
            val seed2 = (seed*0x5DEECE66DL + 0xBL) &
                        ((1L << 48) - 1)
            ((seed2 >>> 16).asInstanceOf[Int],
             simple(seed2))
        }
    }
}

El uso se verá así

val (randomNumber,nextState) = rng.nextInt

Entiendo que es una función pura, ya que devuelve elsiguiente estado&nbsp;y lo deja en el cliente API para usarlo para llamarnextInt&nbsp;la próxima vez necesitaría un número aleatorio, pero lo que no entendí es "¿Cómo se generará el primer número aleatorio?&nbsp;como debemos proporcionarseed&nbsp;al menos una vez.

¿Debería haber otra función para levantarseed&nbsp;conseguir unRNG? Y si es así, ¿cómo esperamos que el cliente de esta API lo sepa (porque en la implementación no funcional el usuario solo llamanextInt&nbsp;y el estado es mantenido por API)

¿Alguien puede dar un ejemplo completo de generador de números aleatorios funcionales puros en Scala y quizás relacionarlo con Monad en general?