Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

In F# list comprehensions, for example, you can have full blown expressions such as loops and conditionals. This is really nice for templating.

    [
      if List.isEmpty items then
        p “No items”
      else
        ul
          [
             for item in items do
               li [ item ]
          ]
    ]


so?

if len(items) == 0: return [p("no items")] else: ul( [ li(item) for item in items ] )

I am also not a fan of convoluted list comprehension (in python) so powerful is not necessarly a good thing.


That only works in a single purpose function.

And consider this example:

    [
      h1 “items”

      if List.isEmpty items then
        p “No items”
      else
        ul
          [
             for item in items do
               li [ item ]
          ]
    ]


h1(items) + rest of my code... I might see what are you using for but I am not sure if concenating implicitly (or with line breaks / spaces) is a good design decision for a language.


The yield keyword is optional. The result is a List<HtmlElement>

I don’t see how this can be done in Python without using mutation, which makes code scattered across multiple statements


your example has also multiply statements. The question is more important: Which syntax to a more generally better readability. (as this is solvable in most languages)


No, it is built from pure expressions. This means that our list is defined in one block (everything within the [ ] tokens) and immutability is enforced by the compiler.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: