A part of me likes this since it can help simplify some code, like in this
example where the "update" is reduced to a single case. You can even
simplify it to a trivial line if you define Msg like this:
-----------------------
view model =
  div []
    [ button [ onClick <| (+) -1 ] [ text "-" ]
    , div [] [ text (toString model) ]
    , button [ onClick <| (+) 1 ] [ text "+" ]
    ]

type alias Msg = Int -> Int

update msg model = msg model
-----------------------
On the other hand defining the state logic from the view seems like an
antipattern since now the view now has 2 responsabilities (structure and
logic) and update practically has none. I'd be pragmatic and use it when it
makes sense, but in general I see the disadvantage that you can pattern
match against a function argument, e.g. you cant know if "(+) -1" or "(+)
1" was sent.

On Tue, Jan 17, 2017, 22:24 Marshall handheld Flax <[email protected]>
wrote:

> Is it wrong for Cmds to contain functions (as opposed to data within
> constructors)?  If it is a reasonable practice, it would allow for more
> functional component-like modules, but does this violate the Elm
> architecture?  If it does, is it explicitly mentioned in the docs -- I
> don't remember seeing it. Here's http://elm-lang.org/examples/buttons
> rewritten in the Cmd-contains-functions style. Thank you!
>
> module Main exposing (..)
>
> import Html exposing (beginnerProgram, div, button, text)
> import Html.Events exposing (onClick)
>
> main =
>     beginnerProgram { model = 0, view = view, update = update }
>
> type Msg
>     = Transform (Int -> Int)
>
> view model =
>     div []
>         [ button [ onClick (Transform ((+) -1)) ] [ text "-" ]
>         , div [] [ text (toString model) ]
>         , button [ onClick (Transform ((+) 1)) ] [ text "+" ]
>         ]
>
> update msg model =
>     case msg of
>         Transform xform ->
>             xform model
>
>
> --
> 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.
>

-- 
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.

Reply via email to