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 <m.droid.f...@gmail.com>
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 elm-discuss+unsubscr...@googlegroups.com.
> 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 elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to