
Elm: declarative language that compiles to HTML, CSS and JS - 6ren
http://elm-lang.org/
======
dbaupp
Previous submission (with discussion):
<https://news.ycombinator.com/item?id=3322082>

(Presumably that submission is why this one (is) was forced to (incorrectly)
have an extra /)

~~~
jessaustin
From that discussion it seems that not much of this system was usable at that
time. Fortunately it appears more complete now. He got his thesis done too.

------
MattRogish
MVC web app development test-driven development has always bothered me. I can
easily test my models/controllers but to verify that the app HTML isn't borked
I have to rely on strict HTML compilation tools (like HAML) and/or
slow/painful frontend integration tests that require button clicking, HTML
parsing, and form-element filling.

I've always wanted a higher-level way to author and test HTML and I always
come back to a more programmatic/declarative way of generating HTML as the
best way. I'm not sure if Elm is the answer but I think it's at least a good
discussion starter.

~~~
blake8086
You could build your HTML as a hierarchical data structure instead of a
string.

------
kv85s
visiting the link yields:

Parse error at (line 1, column 1): unexpected end of input expecting reserved
word 'module', reserved word 'import' or at least one datatype or variable
definition

~~~
TeMPOraL
Which suggests the site is generated in some unsafe way that could possibly be
exploited.

~~~
wheatBread
While this massive bit of speculation is exciting, this is not the case. It is
a compiler error indicating that the poster somehow compiled an Elm file
without any content in it. I suspect my servers are having a bad time right
now, so the file may have been only partially read for some reason.

I am trying to scale my servers up now!

~~~
gliptic
You get the error when you go to <http://elm-lang.org//>

------
pohl
Thank you for posting this link again. It has led me to an interesting paper
on a related paper co-authored by Martin Odersky called "Deprecating the
Observer Pattern with Scala.React"

[http://infoscience.epfl.ch/record/176887/files/DeprecatingOb...](http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf)

Interestingly, the farther I read into this paper, the more I think the
Mozilla Rust community should get behind functional reactive programming.
After all, an experimental language created with the intention of being used
for creating an experimental browser should probably give serious
consideration of the abstractions used for event handling.

I also found a talk on FRP, for anyone who's curious:

<http://www.youtube.com/watch?v=4HMKNexdyOw>

...the slides for which are here:

[http://www.slideshare.net/edwardamsden/introduction-to-
funct...](http://www.slideshare.net/edwardamsden/introduction-to-functional-
reactive-programming)

------
mcmire
A couple of questions:

1) Is this a subset of Haskell, or a brand new language inspired by Haskell?

2) It appears that FRP (which by the way is a cool idea) isn't necessarily
language-specific, is this true? My guess is that Elm just brings FRP to the
forefront in the same way Lisp brings FP to the forefront?

~~~
wheatBread
1) Brand new language inspired by Haskell's syntax, but it is really much
closer to ML (strict evaluation, no type classes). More info:
<http://www.testblogpleaseignore.com/2012/06/21/why-elm/>

2) That is totally true! The idea is quite general. I think it works best in a
strongly typed language like OCaml or Haskell, but it could work anywhere.
FrTime is a Scheme/Lisp/Racket version of FRP. My personal opinion is that it
works _best_ in Elm though :P

~~~
scarmig
Briefly, how would you summarize the semantics of FRP in your language as
compared to Yampa in Haskell?

~~~
wheatBread
A generalization. Arrowized FRP (as introduced in Yampa) can be entirely
embedded in Elm.

The Automaton library is the beginnings of such an embedding: <http://elm-
lang.org/docs/Automaton.elm>

To be more concrete, in Elm you can work directly with signals if you want. In
Yampa you cannot; you only get "signal functions" (which Elm has as well in
the form of Automatons).

------
anonymousDan
Apart from syntax, I fail to see how this code:

    
    
        getPhotos tags =
            let photoList  = send (lift requestTag tags) in
            let photoSizes = send (lift requestOneFrom photoList) in
                lift sizesToPhoto photoSizes
    

...is any clearer than the equivalent callback code:

    
    
      function getPhoto(tag, handlerCallback) {
            asyncGet(requestTag(tag), function(photoList) {
                asyncGet(requestOneFrom(photoList), function(photoSizes) {
                    handlerCallback(sizesToPhoto(photoSizes));
                });
            });
    

In particular, you still have to nest the elm signals in 'let ... in' blocks.

------
desireco42
I find language lacking, promise of single language to handle html, css and js
is simply not delivered.

I kind of imagined something like components where you would have html, css
and js and you can say

login_form = new loginForm(loginProcess)

where loginProcess would be callback that would get username and password...
or something along those lines.

I guess those are html components that someone was writing about...

~~~
larskinn
Callbacks are actually one of the things this is explicitly trying to avoid:
<http://elm-lang.org/learn/Escape-from-Callback-Hell.elm>

------
larskinn
Very nice, accessible examples and documentation. Can't wait to try it out
(after exams)

------
woah
Is this actually useful? Has anyone tried it? The examples are quite
simplistic. I would like to see a more full featured app or site before I
invest any time into investigating it.

~~~
wheatBread
I think so, but I am biased (lead dev and designer :P)

The entire site is written in Elm (excluding the code editor which relies on
CodeMirror). If you click the "View Page Source" in the top right corner of
every page, you can see the full source for it.

For example: <http://elm-lang.org/edit/Examples.elm>

Here's the [full source for the website](<https://github.com/evancz/elm-
lang.org/tree/master/public>) and a [game of Pong]([http://elm-
lang.org/blog/games-in-elm/part-0/Making-Pong.htm...](http://elm-
lang.org/blog/games-in-elm/part-0/Making-Pong.html)).

------
wyclif
I always think about the MUA when anyone says "Elm":
<http://www.instinct.org/elm/>

I guess that means I'm old.

~~~
cincinnatus
Was the first thing to come to my mind as well. Used it every day in the mid
to late 80s.

------
shortlived
Is elm-server just another web server or does it serve up elm files directly?

PS - this project looks really great! It makes me interested in web dev again.

~~~
wheatBread
It serves Elm files directly. You just start it up, and can use F5 to
recompile files from the browser.

PS. Thank you! :D I actually like web programming these days because of it :)

------
at-fates-hands
I'm seeing a lot of inline styles on elements on the site. Not sure if this is
part of how the language is supposed to work.

------
scarmig
Oh, I hadn't seen the pong example before!

Reminds me of the old paper on Space Invaders.

------
mgaudin
Epic fail.

------
sidcool
It's a pretty old submission. I wonder what prompted it to be upvoted again.
But it's fine, as long as it's related to Technology and Programming.

