Skip to content

Instantly share code, notes, and snippets.

@JEG2
Last active July 20, 2016 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JEG2/8e3061d75218138345fbabdf8ebfd6ed to your computer and use it in GitHub Desktop.
Save JEG2/8e3061d75218138345fbabdf8ebfd6ed to your computer and use it in GitHub Desktop.
The full program for streaming a new random number each second.
module ARandomNumberASecond exposing (main)
import Html exposing (..)
import Html.App
import Time exposing (Time, second)
import Random
type alias Flags = {randSeed : Int}
main : Program Flags
main =
Html.App.programWithFlags
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
-- MODEL
type alias Model =
{ currentSeed : Random.Seed
, numbers : List Int
}
init : Flags -> (Model, Cmd Msg)
init {randSeed} =
( { currentSeed = Random.initialSeed randSeed
, numbers = [ ]
}
, Cmd.none
)
-- UPDATE
type Msg = Tick Time
update : Msg -> Model -> (Model, Cmd Msg)
update _ {currentSeed, numbers} =
let
(number, nextSeed) = Random.step (Random.int 1 100) currentSeed
in
( { currentSeed = nextSeed
, numbers = numbers ++ [number]
}
, Cmd.none
)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions _ =
Time.every second Tick
-- VIEW
view : Model -> Html Msg
view {currentSeed, numbers} =
case numbers of
[ ] ->
viewLoading
_ ->
viewNumbers numbers
viewLoading : Html Msg
viewLoading =
text "Loading..."
viewNumbers : List Int -> Html Msg
viewNumbers numbers =
div [ ] (List.map viewNumber numbers)
viewNumber : Int -> Html Msg
viewNumber n =
p [ ] [text (toString n)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment