Elm: declarative language that compiles to HTML, CSS and JS
elm-lang.org
elm-lang.org
(Presumably that submission is why this one (is) was forced to (incorrectly) have an extra /)
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.
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
I am trying to scale my servers up now!
http://infoscience.epfl.ch/record/176887/files/DeprecatingOb...
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...
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?
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
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).
[1] https://github.com/brownplt/flapjax
[2] http://www.flapjax-lang.org/docs/
[3] http://www.cs.brown.edu/~sk/Publications/Papers/Published/mg...
A couple of years ago, I began (somewhat naively, on my own) hacking together a "next gen" version which was intended to generalize the functionality of Flapjax-as-a-library. I learned a lot, and ended up coming face-to-face with monads and monad transformers (though I didn't realize it at the time) and the limitations and complications that mutable data structures (as opposed to immutable ones) imply for dataflow/FRP frameworks. My work on that library stopped when I shifted from NodeJS to Clojure/ClojureScript for my day-to-day work. Now that I'm a bit more experienced with functional programming, monads, etc., I hope to find some time to restart that effort, using ClojureScript (and protocol-monads[4]?) as the foundation.
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.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...
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...).
I guess that means I'm old.
PS - this project looks really great! It makes me interested in web dev again.
PS. Thank you! :D I actually like web programming these days because of it :)
Reminds me of the old paper on Space Invaders.