Indeed, Elm was an inspiration. As was the terrific Hoplon, which doesn't get nearly enough praise.
We all know that immutable data let's you manage "time" better, right? We're able to ignore (isolate ourselves from) the effect of time on data.
FRP is another dimension in the same process. FRP allows us to model the "flow" of data over "time". It allows us to manage the process of producing "Derived Data" (materialised views) over time. Again, it is all about doing the "time/data” thing better.
That was a big learning for me (I worry that everyone else already knows this already, and I'm just very late to the party).
Perhaps the biggest moment for me was seeing Pete Hunt (Facebook) talking at reactconf. In his talk, he referenced a particular StrangeLoop video, mentioning how it had had a big influence on the way Facebook looked at things these days, and then he talked about how it was all about "Derived Data".
When I watched the video, a small nuclear explosion went off in the back of mind. The penny suddenly dropped for me about FRP.
At that point, I suddenly understood what I had been trying to achieve with re-frame, and why I found it so pleasing to work with. It all made sense.
The key thing for me is: JUST. DON'T. USE. CURSORS. There I said it. They appear convenient, I know. They are a way of achieving reference transparency, I know. But I think they are a “local optimum”. Their use seems to get in the way of a more important data flow paradigm and they seem to encourage "control" into all the wrong places (components). At least that's my experience (I did try to love them, really I did :-)).
I know this is a controversial opinion within ClojureScript right now. OM has such an overwhelming mindshare. David is a very compelling and important character.
Anyway, I'll finish off the todomvc over the weekend. That will make re-frame a bit more real and easy to Grok.
--
Mike