You can also express that as:
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Roll ->
(model, Random.generate NewFace (Random.pair (Random.int 1 6)
(Random.int 1 6)))
NewFace newFace ->
((uncurry Model) newFace, Cmd.none)
On Fri, Jun 3, 2016 at 5:49 PM, Robert Walter <[email protected]>
wrote:
> Okay, once I thought of the correct search term, I found a solution (using
> fst and snd from Basics):
>
> update : Msg -> Model -> (Model, Cmd Msg)
> update msg model =
> case msg of
> Roll ->
> (model, Random.generate NewFace (Random.pair (Random.int 1 6) (
> Random.int 1 6)))
>
>
> NewFace newFace ->
> (Model (fst newFace) (snd newFace), Cmd.none)
>
>
> On Friday, June 3, 2016 at 4:40:50 PM UTC+2, Robert Walter wrote:
>>
>> If this is not the right forum for these kinds of questions, please point
>> me to the right place.
>>
>> Anyway, I try to work my way the The Elm Architecture.
>> As an exercise, I tried to enhance the Random Dice example by adding a
>> second die. My idea is to add a second Int to the Model and use the
>> Random.pair generator to produce random pairs.
>>
>> This is what I can come up with:
>>
>> import Html exposing (..)
>> import Html.App as Html
>> import Html.Events exposing (..)
>> import Random
>>
>> main =
>> Html.program
>> { init = init
>> , view = view
>> , update = update
>> , subscriptions = subscriptions
>> }
>>
>>
>> -- MODEL
>>
>> type alias Model =
>> { dieFace1 : Int
>> , dieFace2 : Int
>> }
>>
>>
>> init : (Model, Cmd Msg)
>> init =
>> (Model 1 1, Cmd.none)
>>
>>
>> -- UPDATE
>>
>> type Msg
>> = Roll
>> | NewFace (Int, Int)
>>
>>
>> update : Msg -> Model -> (Model, Cmd Msg)
>> update msg model =
>> case msg of
>> Roll ->
>> (model, Random.generate NewFace (Random.pair (Random.int 1 6) (
>> Random.int 1 6)))
>>
>>
>> NewFace newFace ->
>> (newModel, Cmd.none)
>>
>>
>> newModel : (Int, Int) -> Model
>> newModel (a, b) =
>> Model a b
>>
>>
>> -- SUBSCRIPTIONS
>>
>> subscriptions : Model -> Sub Msg
>> subscriptions model =
>> Sub.none
>>
>>
>> -- VIEW
>>
>>
>> view : Model -> Html Msg
>> view model =
>> div []
>> [ h1 [] [ text (toString model.dieFace1) ]
>> , h1 [] [ text (toString model.dieFace2) ]
>> , button [ onClick Roll ] [ text "Roll" ]
>> ]
>>
>>
>> This fails compiling with the following message:
>>
>> Detected errors in 1 module. -- TYPE MISMATCH
>> --------------------------------------------------------------- The type
>> annotation for `update` does not match its definition. 42| update : Msg
>> -> Model -> (Model, Cmd Msg)
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> The type annotation is saying: Msg
>> -> { dieFace1 : Int, dieFace2 : Int }
>> -> ( { dieFace1 : Int, dieFace2 : Int }, Cmd Msg ) But I am inferring
>> that the definition has this type: Msg -> (( Int, Int ) -> Model) -> ( (
>> Int, Int ) -> Model, Cmd Msg )
>>
>>
>> I guess what I'm missing is how to create a new Model out of the (Int,
>> Int) tuple. Maybe this is, however, fundamentally wrong?
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Elm Discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
There is NO FATE, we are the creators.
blog: http://damoc.ro/
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.