I would agree with Noah Hall, the let/in keywords make parsing easier. In a
simple expression like you provided:
a = 5
b = 6
a + b
it's all clear, but in real code things are much more complicated and
confusing. I have looked at the Todo.elm you prepared and (for me) it is
much harder to reason about.

Regards,
Witold Szczerba

On Sat, Apr 22, 2017 at 10:23 PM, Noah Hall <[email protected]> wrote:

> Two notes:
>
> Let bindings do not have order. Using them in the way suggested
> implies order. In this world, they would have to be ordered or
> confusion would reign. This is more imperative style.
>
> I've actually really disliked this in CoffeeScript/Ruby, that
> implicitly the last item in the block is the thing returned. Makes it
> a lot harder to parse mentally.
>
> -1.
>
> On Fri, Apr 14, 2017 at 10:00 PM, Akio Burns <[email protected]> wrote:
> > It's not clear to me why Elm uses `let`, instead of simply scoping
> > definitions to the expression below them.
> >
> >
> > With `let`:
> >
> > foo =
> >     let
> >         a = 1
> >         b = 2
> >     in
> >         a + b
> >
> > Scoping definitions to the expression below them:
> >
> > foo =
> >     a = 1
> >     b = 2
> >
> >     a + b
> >
> >
> > I understand that each function must contain a single expression. In Elm,
> > although they contain expressions, definitions are not expressions.
> >
> >
> > Visualized:
> >
> > foo =
> >     <EXPRESSION HERE>
> >
> > foo =
> >     a + 2 <- EXPRESSION
> >
> > foo =
> >     a = 1 <- DEFINITION SCOPED TO THE a + 2 EXPRESSION
> >     a + 2
> >
> >
> > Another way to demonstrate scope is:
> >
> > let
> >     a = 1
> >     b = 2
> > in
> >     a + b
> >
> > would become (parenthesis to demonstrate scope):
> >
> > (
> >     a = 1
> >     b = 2
> >
> >     a + b
> > )
> >
> >
> > It seems to me that `let` and `in` are unnecessary and verbose. Put
> another
> > way, I think few people would agree that requiring a keyword before
> variable
> > assignment `set a = 1` would be a good idea. The `=` makes the intent
> > explicit. Likewise, indentation—or parenthesis—could make scopes
> explicit,
> > and `let` and `in` unnecessary.
> >
> > Some have argued that without `let`, we could not have arbitrarily nested
> > scopes. I don't have significant experience with Elm, but I would guess
> that
> > nesting `let`s today is pretty big code smell. Instead of nesting `let`s
> to
> > reuse variable names, developers should either pick more descriptive
> > variable names, or abstract into a function.
> >
> >
> > This could—of course—apply anywhere an expression is expected:
> >
> > True ->
> >     x = 0
> >     y = 0
> >
> >     (x, y)
> > ...
> >
> >
> > @rtfeldman on the Slack pointed out that this syntax is more diff
> friendly:
> >
> > if I write a view function like
> > view model =
> >     div []
> >         [ ... lots of other stuff ]
> >
> > and then I want to introduce a nested constant like so:
> > view model =
> >     let
> >         foo = ...
> >     in
> >         div []
> >             [ ... lots of other stuff ]
> >
> > the fact that I indented the final expression makes the VCS diff explode
> > this happens to me all the time, and it's pretty annoying
> > with [this] idea it wouldn't happen anymore
> >
> >
> > Lastly, here's elm-todomvc with scoped definitions, courtesy of
> @rtfeldman
> > again:
> >
> > https://github.com/rtfeldman/elm-todomvc/blob/
> 8678c8bcaeb5cb4b3f87dbefb7a01b5fe492dbc7/Todo.elm
> >
> > --
> > 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.
>

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