I want to study FRP in Haskell, but it's a bit difficult to decide on a library to use. Many seem to be dead attempts, some seem to have been resurrected (such as recent activity on Yampa).
From what I read, it seems that there are two "kinds" of FRP: push-pull FRP (like in Reactive-banana and Reflex) on one side and arrowized FRP (like in Yampa) on the other side. It seems that there also used to be some "classic FRP" at the time of Fran and FrTime, but I have not spotted any recent activity in these.
Are these two (or three) really fundamentally different approaches of FRP?
Is one of them outdated theory whereas the other would be the "stuff of the future"?
Or do they have to evolve in parallel, addressing different purposes?
Did I name the most prominent library of each category, or are there other options to consider (Sodium, Netwire, et al)?
I finally watched the [talk from Evan Czaplicki](https://www.youtube.com/watch?v=Agu6jipKfYw) recommended in the comments by J. Abrahamson. It is very interesting and did help clarify things up for me. I highly recommend it to anyone who found this question interesting.
reactive-banana
is definitely pull-based not push-pull.reactive
is push-pull.Yampa
andnetwire
are arrowized. There are FRPs which allow "accumulating values" but don't allow "switching", FRPs which allow "switching" but not "accumulating values". Both of those are "simple" FRP. Arrowized FRP allows switching and accumulating and uses arrows to control the danger of combining those features. Monadic FRP likereactive-banana
,sodium
, andelerea
use other careful mechanisms to ensure that switching and accumulating don't interact too much. – Gamenessreactive-banana
doesn't have a monadic but an applicative interface. – Wilks