[Haskell-cafe] Number of widgets extant and displayed varying over time? (FRP, reactive-banana)

Heinrich Apfelmus apfelmus at quantentunnel.de
Fri Jan 16 17:01:51 UTC 2015


Dear Jeffrey,

> Does that mean one has to collect the garbage oneself, or does it
> mean that garbage cannot be collected at all?

At the moment, it means that garbage cannot be collected at all. This 
will change in the next version, reactive-banana-0.9. (There is no 
anticipated release date yet, though.)

> There might never be more than fifty or so frames of text on display
> at any one time, but in a single session I can easily imagine drawing
> hundreds of thousands of them.

I'm not quite sure what you mean by "frame". If it's a text whose 
position can move, then you can probably model it by a

   Behavior (Position, String)

The, "moving text block" is the smallest entity that you would have to 
garbage collect, and I guess there are no more than ~300 of them active 
over the lifetime of a program.

If you create a new Behavior each time the text is moved, then things 
become more resource intensive, of course. Then, it would be necessary 
to garbage collect a Behavior each time that a text is moved, these are 
probably proportional to the number of mouse clicks that the user makes 
over the lifetime of the program.


Best regards,
Heinrich Apfelmus

--
http://apfelmus.nfshost.com


Jeffrey Brown wrote:
> Thanks, Heinrich!
> 
> Reactive Banana's front page on Hackage [1] indicates that
> Reactive.Banana.Switch offers "no garbage collection for events that are
> created dynamically". Does that mean one has to collect the garbage
> oneself, or does it mean that garbage cannot be collected at all?
> 
> My eventual goal is to write a mindmap editor, ala Freeplane. There might
> never be more than fifty or so frames of text on display at any one time,
> but in a single session I can easily imagine drawing hundreds of thousands
> of them. (For that estimate I am assuming a single line of text in the
> model would require a new frame each time it is redisplayed; if instead a
> frame could persist invisibly and be redrawn later, most sessions would, I
> imagine, involve fewer than five thousand frames -- but even then it's not
> obvious to me that I could forego garbage collection.)
> 
> [1] https://hackage.haskell.org/package/reactive-banana
> 
> On Tue, Jan 13, 2015 at 11:04 PM, Heinrich Apfelmus <
> apfelmus at quantentunnel.de> wrote:
> 
>> Jeffrey Brown wrote:
>>
>>> Dear list,
>>>
>>> I want to write an application in which the set of widgets in existence,
>>> and the subset of them that is displayed, depends on user input. I am
>>> using
>>> reactive-banana. So far the simplest spec I have imagined for it is this:
>>>
>>>     Initially there is just a text entry box and an empty (hence
>>> invisible)
>>> collection of labels.
>>>
>>>     The user can do two things: enter the word "add", or enter an integer.
>>>
>>>     Entering the word "add" causes a label to be added to the collection,
>>> but not displayed. The labels require no text content.
>>>
>>>     Entering an integer N causes the first N labels to be displayed
>>> onscreen. The text entry box remains visible.
>>>
>>> I am totally baffled. In particular, the Behavior paradigm, though it is
>>> elegant and beautiful whenever I study it, I have no idea how to apply.
>>>
>> This looks like you need "dynamic event switching", i.e. the module
>> `Reactive.Banana.Switch`. It's very cool, but may be more difficult to
>> understand than the standard combinators, mainly because of the additional
>> type parameters.
>>
>> To see how it works, have a look at the `BarTab.hs` example. It implements
>> a program that is very similar to what you describe here.
>>
>>
>> Best regards,
>> Heinrich Apfelmus
>>
>> --
>> http://apfelmus.nfshost.com



More information about the Haskell-Cafe mailing list