What I learned the hard way -- both trying to develop a "next gen" derivative and using it in my own projects -- is that it's all too easy to underestimate the pain of getting trapped in the monad, over and over again.
FRP is not the answer. Clojure/Script's core.async is a better way to do reactive programming, and yet... a declarative and structural DSL which allows for little bits of imperative glue code with contracts and highly controlled effects, and which allows disparate components to "automagically" pass immutable messages without extra plumbing, that is the future. It's what I want to use for own projects, and I hope others will enjoy it as well. Work is in progress. David Harel showed the way over two decades ago.
Interesting references to statecharts, I remember reading about them in the late 90ies and not much coming out of it. (Note that link  above is to an out-of-print book that can now be downloaded)
How do you see constraints relating to this?
I have just started using C# with RX extensions to do some ui work, and so far I liked it. But I have never utilized RX directly on managing event-streams, mostly for binding changing data to various ways of displaying it.
Second thing, I don't think I have been "trapped in the monad", and as far as I can see, C# devs are quite fond of the pattern (i.e., isn't Task a monad, Observable as well?)
How common is it to use "await" in conjunction with Rx? Your answer will provide needed insight.