7 ms·
This is super helpful. The example with the multi-click stream is pretty impressive as a demo. Is anyone familiar with the Elm[1] language/library that compiles
by peaton 12y ago
This is super helpful. The example with the multi-click stream is pretty impressive as a demo. Is anyone familiar with the Elm[1] language/library that compiles to JS? Does it facilitate good FRP practice? Or are there any better libraries/languages out there? I've just seen a lot of Elm when I've google FRP in the past. (Followed closely by Haskell.)
[1] http://elm-lang.org/ http://elm-lang.org/
- seanmcdirmid 12y agoNeither Rx nor Elm are FRP. If you want FRP, look at Conal Elliott's work.
- peaton 12y agoWill do. Thanks for the pointer. Do you have any suggestions offhand?
- seanmcdirmid 12y agoStart at the beginning: http://conal.net/fran/tutorial.htm http://conal.net/fran/tutorial.htm Warning: FRP is much more purest than Rx (which is just data flow) or Elm (which is more FRPish but asynchronous). You probably don't want FRP but something more pragmatic like the fore mentioned systems.
- newgame 12y agoFrom what I understand, although Conal Elliot coined the term FRP first in a relatively narrow sense, today the term FRP is used much more freely to describe reactive programming using functional building blocks (especially combinators like map, filter etc.). There are some nice papers that give an overview of the FRP landscape. “A Survey on Reactive Programming”: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.416.1589&rep=rep1&type=pdf http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.416... “Towards Reactive Programming for Object-oriented Applications”: http://www.guidosalvaneschi.com/attachments/papers/2014_Towards-Reactive-Programming-for-Object-Oriented-Applications_pdf.pdf http://www.guidosalvaneschi.com/attachments/papers/2014_Towa...
- platz 12y agoThese papers actually look readable. I'll give them some time, thanks for posting!
- seanmcdirmid 12y agoThis is not true at all. It is only recently and only in the SF hacker bubble that FRP has been co-opted to mean anything that is functional, reactive, and programmed. Outside, FRP still means FRP, and using the term will automatically put your work in a certain specific bucket that you might not want to be in.
- tel 12y agoI haven't looked at Elm deeply, but last time I took a look it seemed to be very much FRP. What do you think it is missing?
- xpaulbettsx 12y agoThis pedantic distinction isn't useful to anyone, please stop Well Actually'ing people
- rwosync 12y agoIt's not a pedantic distinction given how much the term has been overloaded to refer to dissimilar concepts.
- platz 12y agoWe should just have separate terms for Discrete vs Continuous flavors instead of fighting over the one true "FRP"
- seanmcdirmid 12y agoIt's not just that. Elm and Rx lack continuous value streams at all, they are completely discrete; also they are very much asynchronous, so they are more like the event stream manipulation done via data flow in the 70s rather than what Elliott and Hudak invented in the late 90s. For something to be called FRP, they at least need both continuous and discrete abstractions; the simplest description of FRP involves re-evaluation A + B over time, which is not meaningful in Rx or Elm, really.
- jules 12y agoIt's meaningful in Elm.
- seanmcdirmid 12y agoI would love to see an example. I've browsed Evans' thesis, and it seems like he explicitly avoids continuous abstractions (behaviors) for event processing.
- jules 12y ago
- mattpodwysocki 12y agoElm nor Rx or any of its variants are FRP, and instead, we like to consider ourselves on the Rx team as complex event processing and stream-based programming.
- X4 12y agoWould you elaborate on why Elm isn't FRP please? I've added a bit, but I hope to hear more from an expert on the topic :)
- X4 12y agoMy buddy held a talk on Elm last week and they're going to publish a paper on it focusing on the FRP part. But to my knowledge Elm isn't pure FRP because it mixes state with behaviour. (not entirely sure though). The good part is that it works, the bad part is that it's creating messy and bloated js output, even for hello world.