Random is not pure in Elm
Elm requires that functions be pure, that is, the same arguments should produce the same outputs every time. Random necessarily injects some uncertainty into what the outputs that way and Elm has decided to handle random differently than in other languages.
First, install the random package:
elm install elm/random
The Random package allows you to create numbers in a couple of different ways, but the most idiomatic is to create a generator:
generator = (Random.int 1 10)
And then create a message that will let the Elm runtime know to produce a random number with the parameters defined by the generator.
type Msg = ConsumeRandomValue
msg = Random.generate ConsumeRandomValue generator
This message can then be placed into the (model, msg)
tuple that is returned from the update
function. The update
function is then called to respond to the message, using the message type to wrap the random value that has been produced.
import Random
type Msg = ProduceRandomValue | ConsumeRandomValue Int
update msg model =
case msg of
ProduceRandomValue ->
(model, Random.generate ConsumeRandomValue (Random.int 1 10))
ConsumeRandomValue randomValue ->
({model | rValue = randomValue}, Cmd.none)
Tweet