Last active
July 20, 2016 13:48
-
-
Save JEG2/8e3061d75218138345fbabdf8ebfd6ed to your computer and use it in GitHub Desktop.
The full program for streaming a new random number each second.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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