<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 18 February 2018 at 17:26, Ertugrul Söylemez <span dir="ltr"><<a href="mailto:esz@posteo.de" target="_blank">esz@posteo.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[...]<br><br>
In AFRP all behaviours and events are "virtual" in a sense.</blockquote><div><br></div><div>Only in "pure" forms of AFRP, that is, those without a monad, and only so long as you stick to the arrow framework and/or arrow notation. Just because something supports AFRP doesn't mean that you have to use it limited to the traditional AFRP interface.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  Though<br>
arrow notation can make it look like they are actual values this is<br>
really just an illusion. <br></blockquote><div><br>But this is what I mean when I talk about applicatives.<br><br>I'm honestly not seeing a big difference between behaviours in CFRP and signals in Dunai/Wires/Varying.<br><br></div><div>For instance, you can define Behaviour as:<br><br></div><div>type Beh a = MSF Identity a<br><br></div><div>(Or maybe a better monad ,or even an adhoc monad that connects the external providers in a referentially transparent way.)<br><br></div><div>You can then put it in a data structure (it's a first-class entity), it will be garbage collected when appropriately, you can demand new values as necessary, and you can operate with it also "as if it where a signal":<br><br></div><div>myBeh = f <$> beh1 <*> beh2<br><br></div><div>You can define instances of Num if you want to write:<br><br>myBeh = beh1 + beh2<br><br></div><div>Although that's not easily extensible to all functions that act on values.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> That's why you can't sensibly communicate an<br>
event out of the wire/SF/MSF/MealyT/…<br></blockquote><div><br></div><div>But you can. That's precisely what the monad allows you to do.<br><br></div><div>I suspect I may not be understanding precisely what you mean. Perhaps you can describe this in more detail or with an example? (feel free to email me personally if this is derailing the original conversation off-topic.)<br><br></div><div>If you mean what I understand from your words, I'd say you can communicate events out, and I do this all the time. I even built a system to synchronize discrete games with continuous animations without having to pipe data explicitly all the way up, based on "implicit" event passing using MSFs.<br><br></div><div>Cheers<br><br></div><div>Ivan<br></div></div></div></div>