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.