
Hi Ivan,
Given then that what I said about classic FRP and many variants of FRP should apply to wires too, how would programming in a classic FRP library be any different from using Wires, Dunai, Varying, etc., all of which are based on the same construct? (Performance aside.)
the main difference between AFRP and first-class FRP is that in the latter behaviours and events are, well, *first-class*. For example in reflex when you construct a (Behavior t Integer), this is an actual value that is not tied to any particular monad or arrow. It can be stored in data structures and is subject to garbage-collection like every other value. Some operations still require a certain monad, but that is only necessary because those are bound to an instant in time. For example you can't 'hold' an event in a pure function, holding requires a notion of "now", which a pure function cannot provide. In AFRP all behaviours and events are "virtual" in a sense. Though arrow notation can make it look like they are actual values this is really just an illusion. That's why you can't sensibly communicate an event out of the wire/SF/MSF/MealyT/… Greets ertes