Even worse, it blocks the import/export feature of the time-travelling 
debugger -- 
see ./elm-stuff/packages/elm-lang/virtual-dom/2.0.3/src/VirtualDom/Overlay.elm 
which emits the error "type of your program cannot be reliably serialized 
for history files." 

I'm wondering: should the compiler issue a warning if I do something this 
wrong?

Thanks!

Marshall

On Wednesday, January 18, 2017 at 2:37:00 AM UTC-5, Nick H wrote:
>
> Your particular example can be rewritten easily to not use functions (and 
> with even less duplication):
>
> type Msg
>     = Add Int
>
> view model =
>     div []
>         [ button [ onClick (Add -1) ] [ text "-" ]
>         , div [] [ text (toString model) ]
>         , button [ onClick (Add 1) ] [ text "+" ]
>         ]
>
> update msg model =
>     case msg of
>         Add delta ->
>             model + delta
>
>
> On Tue, Jan 17, 2017 at 11:31 PM, Nick H <[email protected] 
> <javascript:>> wrote:
>
>> I would come down on the side of very very wrong. Functions can't be 
>> converted into strings, and they can't be checked for equality. So if you 
>> need to debug your program (say, with the interactive debugger), There is 
>> no way to examine the data being passed in your commands.
>>
>>
>> On Tue, Jan 17, 2017 at 7:24 PM, Marshall handheld Flax <
>> [email protected] <javascript:>> 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] <javascript:>.
>>> 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