<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Garbage collecting the semantics of FRP</title>
	<atom:link href="http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp</link>
	<description>Inspirations &#38; experiments, mainly about denotative/functional programming in Haskell</description>
	<lastBuildDate>Sat, 18 May 2013 00:33:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	<item>
		<title>By: Sjoerd Visscher</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-90982</link>
		<dc:creator>Sjoerd Visscher</dc:creator>
		<pubDate>Mon, 21 Nov 2011 12:42:05 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-90982</guid>
		<description>&lt;p&gt;You might be interested in this: http://www.reddit.com/r/haskell/comments/mj23v/new_video_lecture_how_to_be_more_productive/&lt;/p&gt;

&lt;p&gt;I wonder if it is possible (or makes sense even) to apply the Banach fixed-point theorem to the continuous time model.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>You might be interested in this: <a href="http://www.reddit.com/r/haskell/comments/mj23v/new_video_lecture_how_to_be_more_productive/" rel="nofollow">http://www.reddit.com/r/haskell/comments/mj23v/new_video_lecture_how_to_be_more_productive/</a></p>

<p>I wonder if it is possible (or makes sense even) to apply the Banach fixed-point theorem to the continuous time model.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: A Model for Denotative Continuous-Time Programming &#171; Jake McArthur</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-77662</link>
		<dc:creator>A Model for Denotative Continuous-Time Programming &#171; Jake McArthur</dc:creator>
		<pubDate>Sun, 03 Apr 2011 17:59:09 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-77662</guid>
		<description>&lt;p&gt;[...] Garbage Collecting the Semantics of FRP, Conal muses over some of the issues with the semantics of DCTP. He explains that both classic and [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Garbage Collecting the Semantics of FRP, Conal muses over some of the issues with the semantics of DCTP. He explains that both classic and [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-77660</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Sun, 03 Apr 2011 17:04:39 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-77660</guid>
		<description>&lt;p&gt;Lambdor: I&#039;m with you on both counts. For some related remarks, see the post &lt;a href=&quot;http://conal.net/blog/posts/why-classic-FRP-does-not-fit-interactive-behavior/&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Why classic FRP does not fit interactive behavior&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Lambdor: I&#8217;m with you on both counts. For some related remarks, see the post <a href="http://conal.net/blog/posts/why-classic-FRP-does-not-fit-interactive-behavior/" rel="nofollow"><em>Why classic FRP does not fit interactive behavior</em></a>.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Lambdor</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-77071</link>
		<dc:creator>Lambdor</dc:creator>
		<pubDate>Tue, 22 Mar 2011 20:56:15 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-77071</guid>
		<description>&lt;p&gt;In game development I think we would very much like to go forward and backward in time and skew it (see games like Braid, the new Prince of Persia, Max Payne etc.) but maybe this is a totally different aspect which should be covered by some sort of &quot;recording&quot;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>In game development I think we would very much like to go forward and backward in time and skew it (see games like Braid, the new Prince of Persia, Max Payne etc.) but maybe this is a totally different aspect which should be covered by some sort of &#8220;recording&#8221;.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Wolf Tivy</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-46404</link>
		<dc:creator>Wolf Tivy</dc:creator>
		<pubDate>Mon, 31 May 2010 20:32:51 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-46404</guid>
		<description>&lt;p&gt;In control theory, we use the Laplace Transform to turn time (t) domain integral and differential equations into frequency (s) domain &quot;transfer functions&quot;. There is some amount of non-causality in the definition of s and the Laplace Transform, as it involves integration over t=0..inf, but I think it is is very easy to restrict.&lt;/p&gt;

&lt;p&gt;In the time domain, differentiation and integration are difficult to compute and composing systems involves the usual gymnastics. In the s domain however, a differentiator is just D(s)=s, an integrator is I(s)=1/s, and composition is just multiplication.&lt;/p&gt;

&lt;p&gt;The point of all this is that the s-domain somehow encapsulates all derivatives and integrals into one complex number to allow any causal system to be defined as a simple Complex-&gt;Complex. This seems to be what you are looking for, specifically the &quot;behaviors are some sort of function with all of its derivatives&quot; part.&lt;/p&gt;

&lt;p&gt;I have been trying to apply these (control theory) ideas to FRP ever since I discovered FRP. The kinks are in a) Trying to connect s-domain transfer functions to time domain data streams (I think MATLAB (simulink) does it somehow). b) Extending the concept to arbitrary data (not just vectors of complex). And c) Somehow coping with dynamically determined transfer function networks. If you could work out these issues I think you would have a the right model for FRP.&lt;/p&gt;

&lt;p&gt;The laplace transform seems to deal with discontinuities fairly well; the laplace transform of the delayed unit step is just Del(s)=exp(s-a) or something, though again, how to connect this to the outside world is unknown to me.&lt;/p&gt;

&lt;p&gt;I think it would be a good idea to look into control theory for some ideas, even if the laplace transform and the s domain cant be used directly. The concept of using arbitrary access to past and future (at least in an abstract denonational sense) and then encapsulating it into some parameter might be useful for FRP.&lt;/p&gt;

&lt;p&gt;I hope this is helpful. Good Luck.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>In control theory, we use the Laplace Transform to turn time (t) domain integral and differential equations into frequency (s) domain &#8220;transfer functions&#8221;. There is some amount of non-causality in the definition of s and the Laplace Transform, as it involves integration over t=0..inf, but I think it is is very easy to restrict.</p>

<p>In the time domain, differentiation and integration are difficult to compute and composing systems involves the usual gymnastics. In the s domain however, a differentiator is just D(s)=s, an integrator is I(s)=1/s, and composition is just multiplication.</p>

<p>The point of all this is that the s-domain somehow encapsulates all derivatives and integrals into one complex number to allow any causal system to be defined as a simple Complex-&gt;Complex. This seems to be what you are looking for, specifically the &#8220;behaviors are some sort of function with all of its derivatives&#8221; part.</p>

<p>I have been trying to apply these (control theory) ideas to FRP ever since I discovered FRP. The kinks are in a) Trying to connect s-domain transfer functions to time domain data streams (I think MATLAB (simulink) does it somehow). b) Extending the concept to arbitrary data (not just vectors of complex). And c) Somehow coping with dynamically determined transfer function networks. If you could work out these issues I think you would have a the right model for FRP.</p>

<p>The laplace transform seems to deal with discontinuities fairly well; the laplace transform of the delayed unit step is just Del(s)=exp(s-a) or something, though again, how to connect this to the outside world is unknown to me.</p>

<p>I think it would be a good idea to look into control theory for some ideas, even if the laplace transform and the s domain cant be used directly. The concept of using arbitrary access to past and future (at least in an abstract denonational sense) and then encapsulating it into some parameter might be useful for FRP.</p>

<p>I hope this is helpful. Good Luck.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Point-wise FRP, plus memory &#8211; Part 1 &#171; Noam Lewis</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-42073</link>
		<dc:creator>Point-wise FRP, plus memory &#8211; Part 1 &#171; Noam Lewis</dc:creator>
		<pubDate>Sun, 21 Mar 2010 00:51:13 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-42073</guid>
		<description>&lt;p&gt;[...] FRP, plus memory &#8211; Part&#160;1 By sinelaw  After Conal&#8217;s blog post, I&#8217;ve been thinking about possible models of FRP that satisfy the &#8220;no arbitrary time [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] FRP, plus memory &#8211; Part&nbsp;1 By sinelaw  After Conal&#8217;s blog post, I&#8217;ve been thinking about possible models of FRP that satisfy the &#8220;no arbitrary time [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Stumpf</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-41177</link>
		<dc:creator>Jason Stumpf</dc:creator>
		<pubDate>Tue, 09 Mar 2010 23:08:02 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-41177</guid>
		<description>&lt;p&gt;Working on my own I came up with basically the same thing as Yair, but without anything in hackage yet.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
data Reaction t a b = Reaction [(t,b)] ((t,a) -&gt; Reaction t a b)
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;t is the type of time.  A Reaction has [(t,b)] the events that would come out if no events went in (where each t is the time that has passed since the last event, or since this reaction began in the case of the first event), and ((t,a) -&gt; Reaction t a b) how it responds to an event after a certain amount of time.&lt;/p&gt;

&lt;p&gt;I&#039;m tentatively considering continuous time as events of behaviors, with behaviors represented as (t -&gt; b) functions.  When the event happens, the continuous behavior begins, when the next event happens, a new continuous behavior begins.  This does allow one to use the future and the past, but only as though no events happened or will happen.  The way I see it, this is similar to Conal&#039;s idea of nature, since from a tower of derivatives you can get the behavior function to high precision at any time, but not through discontinuities.  If a stone is thrown, we know where it will land, unless a bird grabs it.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Working on my own I came up with basically the same thing as Yair, but without anything in hackage yet.</p>

<p><code>
data Reaction t a b = Reaction [(t,b)] ((t,a) -&gt; Reaction t a b)
</code></p>

<p>t is the type of time.  A Reaction has [(t,b)] the events that would come out if no events went in (where each t is the time that has passed since the last event, or since this reaction began in the case of the first event), and ((t,a) -&gt; Reaction t a b) how it responds to an event after a certain amount of time.</p>

<p>I&#8217;m tentatively considering continuous time as events of behaviors, with behaviors represented as (t -&gt; b) functions.  When the event happens, the continuous behavior begins, when the next event happens, a new continuous behavior begins.  This does allow one to use the future and the past, but only as though no events happened or will happen.  The way I see it, this is similar to Conal&#8217;s idea of nature, since from a tower of derivatives you can get the behavior function to high precision at any time, but not through discontinuities.  If a stone is thrown, we know where it will land, unless a bird grabs it.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Henrik Nilsson</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-37878</link>
		<dc:creator>Henrik Nilsson</dc:creator>
		<pubDate>Sun, 07 Feb 2010 21:37:02 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-37878</guid>
		<description>&lt;p&gt;Hi Conal,&lt;/p&gt;

&lt;p&gt;You write:&lt;/p&gt;

&lt;p&gt;Instead, the abstraction is a signal transformer, SF a b, whose semantics is (T-&gt;a) -&gt; (T-&gt;b). See Genuinely Functional
   User Interfaces and Functional Reactive Programming, Continued.&lt;/p&gt;

&lt;p&gt;Note that the Yampa papes always insisted this was just a conceptual definition to convey the basic intuitions, a first approximation: Yampa&#039;s signal functions were always &lt;em&gt;causal&lt;/em&gt; by construction, which the FRP Continued paper does state explicitly, and the reason was preciciely to rule out the &quot;junk&quot;, i.e. the signal function we cannot hope to implement in a reactive setting where the input is only revealed as time progresses. The approximate nature of this intuitive definition of signal functions was made even more explicit in later papers by using the &quot;apprixmately equal&quot; symbol in the definition, and even later papers by Neil Sculthorpe and myself has elaboated further on the point of casuality (and other useful temporal properties).&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi Conal,</p>

<p>You write:</p>

<p>Instead, the abstraction is a signal transformer, SF a b, whose semantics is (T-&gt;a) -&gt; (T-&gt;b). See Genuinely Functional
   User Interfaces and Functional Reactive Programming, Continued.</p>

<p>Note that the Yampa papes always insisted this was just a conceptual definition to convey the basic intuitions, a first approximation: Yampa&#8217;s signal functions were always <em>causal</em> by construction, which the FRP Continued paper does state explicitly, and the reason was preciciely to rule out the &#8220;junk&#8221;, i.e. the signal function we cannot hope to implement in a reactive setting where the input is only revealed as time progresses. The approximate nature of this intuitive definition of signal functions was made even more explicit in later papers by using the &#8220;apprixmately equal&#8221; symbol in the definition, and even later papers by Neil Sculthorpe and myself has elaboated further on the point of casuality (and other useful temporal properties).</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Frederick Ross</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-36299</link>
		<dc:creator>Frederick Ross</dc:creator>
		<pubDate>Tue, 19 Jan 2010 16:58:05 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-36299</guid>
		<description>&lt;p&gt;I&#039;ve been playing with this and do you really need integration?  I feel like you might make something of unification.  For example, say you have two text boxes and a button that&#039;s supposed to swap the values in them,&lt;/p&gt;

&lt;p&gt;(val1, val2, True) :- (val2, val1, False) &lt;code&gt;x&lt;/code&gt; (textBox, textBox, button).&lt;/p&gt;

&lt;p&gt;where you unify forwards in time, and the program makes some attempt to use the latest state possible for any given unification.&lt;/p&gt;

&lt;p&gt;I suppose it&#039;s not really FRP if you do it that way, though...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I&#8217;ve been playing with this and do you really need integration?  I feel like you might make something of unification.  For example, say you have two text boxes and a button that&#8217;s supposed to swap the values in them,</p>

<p>(val1, val2, True) :- (val2, val1, False) <code>x</code> (textBox, textBox, button).</p>

<p>where you unify forwards in time, and the program makes some attempt to use the latest state possible for any given unification.</p>

<p>I suppose it&#8217;s not really FRP if you do it that way, though&#8230;</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Beliefs and the Unimpossibility of Functional Reactive Programming &#171; Luke Palmer</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-36148</link>
		<dc:creator>Beliefs and the Unimpossibility of Functional Reactive Programming &#171; Luke Palmer</dc:creator>
		<pubDate>Sun, 17 Jan 2010 05:18:23 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-36148</guid>
		<description>&lt;p&gt;[...] and the rest of the FRP gang has been discussing the semantic junk in classic FRP. Clearly there is more (or rather, less) to an interactive Behavior than an [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] and the rest of the FRP gang has been discussing the semantic junk in classic FRP. Clearly there is more (or rather, less) to an interactive Behavior than an [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-35912</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Wed, 13 Jan 2010 06:23:57 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-35912</guid>
		<description>&lt;p&gt;@Yair:  Thanks for the explanations.  I like the idea of shifting from products to sums in order to track changes finely.  I&#039;ve made some similar explorations, plus a possibly-related post &lt;em&gt;&lt;a href=&quot;http://conal.net/blog/posts/pairs-sums-and-reactivity/&quot; rel=&quot;nofollow&quot;&gt;Pairs, sums, and reactivity&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Great to have people exploring this area.&lt;/p&gt;

&lt;p&gt;No, I haven&#039;t tried your game yet.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@Yair:  Thanks for the explanations.  I like the idea of shifting from products to sums in order to track changes finely.  I&#8217;ve made some similar explorations, plus a possibly-related post <em><a href="http://conal.net/blog/posts/pairs-sums-and-reactivity/" rel="nofollow">Pairs, sums, and reactivity</a></em>.</p>

<p>Great to have people exploring this area.</p>

<p>No, I haven&#8217;t tried your game yet.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Yair Chuchem</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-35895</link>
		<dc:creator>Yair Chuchem</dc:creator>
		<pubDate>Wed, 13 Jan 2010 00:14:11 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-35895</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;Why [b] instead of b?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&#039;m using an alternative to arrows where in merging machines I result with a sum-type result and not a product-type. A list of a sum-type allows to propagate an update on only some values while with product-types it&#039;s hard to tell which has changed.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’m not seeing continuous time here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah, you are right. Peaker was bugging me about it too. I should re-read your post about why continuous time matter because you guys tend to be right about these things :)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Is the Maybe there so you know you’re in a final state&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If so, and if you don’t really need to know, you could simplify away the Maybe and have all inputs lead back to the same interactive behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I do it because I support the merging two machines by running them in sequence and for that I need to know when the machine ends.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Have you thought about how to combine machines that have different input types?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I combine these machines by having an input sum-type. I also have a counterpart to Program called Backend which is merge-able too. My example game and font editor have inputs from and outputs to several backends (GLUT, File, network, etc.)&lt;/p&gt;

&lt;p&gt;btw, did you try running the game? :)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>Why [b] instead of b?</p>
</blockquote>

<p>I&#8217;m using an alternative to arrows where in merging machines I result with a sum-type result and not a product-type. A list of a sum-type allows to propagate an update on only some values while with product-types it&#8217;s hard to tell which has changed.</p>

<blockquote>
  <p>I’m not seeing continuous time here.</p>
</blockquote>

<p>Yeah, you are right. Peaker was bugging me about it too. I should re-read your post about why continuous time matter because you guys tend to be right about these things <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<blockquote>
  <p>Is the Maybe there so you know you’re in a final state</p>
</blockquote>

<p>Yes.</p>

<blockquote>
  <p>If so, and if you don’t really need to know, you could simplify away the Maybe and have all inputs lead back to the same interactive behavior.</p>
</blockquote>

<p>I do it because I support the merging two machines by running them in sequence and for that I need to know when the machine ends.</p>

<blockquote>
  <p>Have you thought about how to combine machines that have different input types?</p>
</blockquote>

<p>I combine these machines by having an input sum-type. I also have a counterpart to Program called Backend which is merge-able too. My example game and font editor have inputs from and outputs to several backends (GLUT, File, network, etc.)</p>

<p>btw, did you try running the game? <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-35894</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Tue, 12 Jan 2010 23:28:01 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-35894</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;I think I may have a nice model that doesn’t allow future access and junk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;div&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;span style=&quot;color: #050; font-weight: bold;&quot;&gt;data&lt;/span&gt; Program a b = Program &lt;span style=&quot;color: green;&quot;&gt;&#123;&lt;/span&gt; progVals :: &lt;span style=&quot;color: green;&quot;&gt;&#091;&lt;/span&gt;b&lt;span style=&quot;color: green;&quot;&gt;&#093;&lt;/span&gt; , progMore :: &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Maybe&quot; rel=&quot;nofollow&quot;&gt;&lt;span style=&quot;color: #833; font-weight: bold;&quot;&gt;Maybe&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: green;&quot;&gt;&#040;&lt;/span&gt;a -&gt; Program a b&lt;span style=&quot;color: green;&quot;&gt;&#041;&lt;/span&gt; &lt;span style=&quot;color: green;&quot;&gt;&#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s kinda a signal transformer though.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Looks like a Moore machine type but with multiple outputs instead of one.  Why &lt;code&gt;[b]&lt;/code&gt; instead of &lt;code&gt;b&lt;/code&gt;?  For a Mealy counterpart, see the &lt;code&gt;MutantBot&lt;/code&gt; type at 
&lt;i&gt;&lt;a href=&quot;http://conal.net/blog/posts/partner-dancing/&quot; rel=&quot;nofollow&quot;&gt;Functional reactive partner dancing&lt;/a&gt;&lt;/i&gt;.
(More variations in other &lt;a href=&quot;http://conal.net/blog/tag/bot/&quot; rel=&quot;nofollow&quot;&gt;bot articles&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;I&#039;m not seeing continuous time here.
Maybe &lt;code&gt;Program&lt;/code&gt; could be composed with a simple type of continuous, non-reactive time functions, as in &lt;em&gt;&lt;a href=&quot;http://conal.net/papers/push-pull-frp/&quot; rel=&quot;nofollow&quot;&gt;Push-pull functional reactive programming&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Is the &lt;code&gt;Maybe&lt;/code&gt; there so you know you&#039;re in a final state?  If so, and if you don&#039;t really need to know, you could simplify away the &lt;code&gt;Maybe&lt;/code&gt; and have all inputs lead back to the same interactive behavior.&lt;/p&gt;

&lt;p&gt;Since your &lt;code&gt;Program&lt;/code&gt; is not syntactic, maybe there&#039;s a more fitting name to be found.&lt;/p&gt;

&lt;p&gt;Have you thought about how to combine machines that have different input types?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>I think I may have a nice model that doesn’t allow future access and junk.</p>
</blockquote>

<p><div>
<pre class="haskell"><span style="color: #050; font-weight: bold;">data</span> Program a b = Program <span style="color: green;">&#123;</span> progVals :: <span style="color: green;">&#91;</span>b<span style="color: green;">&#93;</span> , progMore :: <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Maybe" rel="nofollow"><span style="color: #833; font-weight: bold;">Maybe</span></a> <span style="color: green;">&#40;</span>a -&gt; Program a b<span style="color: green;">&#41;</span> <span style="color: green;">&#125;</span></pre>
</div></p>

<blockquote>
  <p>It’s kinda a signal transformer though.</p>
</blockquote>

<p>Looks like a Moore machine type but with multiple outputs instead of one.  Why <code>[b]</code> instead of <code>b</code>?  For a Mealy counterpart, see the <code>MutantBot</code> type at 
<i><a href="http://conal.net/blog/posts/partner-dancing/" rel="nofollow">Functional reactive partner dancing</a></i>.
(More variations in other <a href="http://conal.net/blog/tag/bot/" rel="nofollow">bot articles</a>.)</p>

<p>I&#8217;m not seeing continuous time here.
Maybe <code>Program</code> could be composed with a simple type of continuous, non-reactive time functions, as in <em><a href="http://conal.net/papers/push-pull-frp/" rel="nofollow">Push-pull functional reactive programming</a></em>.</p>

<p>Is the <code>Maybe</code> there so you know you&#8217;re in a final state?  If so, and if you don&#8217;t really need to know, you could simplify away the <code>Maybe</code> and have all inputs lead back to the same interactive behavior.</p>

<p>Since your <code>Program</code> is not syntactic, maybe there&#8217;s a more fitting name to be found.</p>

<p>Have you thought about how to combine machines that have different input types?</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Yair Chuchem</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-35564</link>
		<dc:creator>Yair Chuchem</dc:creator>
		<pubDate>Sat, 09 Jan 2010 01:15:37 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-35564</guid>
		<description>&lt;p&gt;Hey Conal,&lt;/p&gt;

&lt;p&gt;I think I may have a nice model that doesn&#039;t allow future access and junk.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
data Program a b = Program
  { progVals :: [b]
  , progMore :: Maybe (a -&gt; Program a b)
  }
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It&#039;s kinda a signal transformer though.&lt;/p&gt;

&lt;p&gt;It&#039;s available in hackage package &quot;peakachu&quot;.&lt;/p&gt;

&lt;p&gt;You can also cabal install DefendTheKing for an example RTS game implemented with it.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hey Conal,</p>

<p>I think I may have a nice model that doesn&#8217;t allow future access and junk.</p>

<p><code>
data Program a b = Program
  { progVals :: [b]
  , progMore :: Maybe (a -&gt; Program a b)
  }
</code></p>

<p>It&#8217;s kinda a signal transformer though.</p>

<p>It&#8217;s available in hackage package &#8220;peakachu&#8221;.</p>

<p>You can also cabal install DefendTheKing for an example RTS game implemented with it.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Derek Elkins</title>
		<link>http://conal.net/blog/posts/garbage-collecting-the-semantics-of-frp/comment-page-1#comment-35507</link>
		<dc:creator>Derek Elkins</dc:creator>
		<pubDate>Fri, 08 Jan 2010 04:55:06 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=96#comment-35507</guid>
		<description>&lt;p&gt;For Jake:  &quot;Junk-freeness&quot; is usually called definability or full completeness in denotational semantics.  The &quot;junk&quot; terminology comes from, primarily, universal algebra and algebraic semantics.  There the motto is &quot;no confusion, no junk.&quot;&lt;/p&gt;

&lt;p&gt;Junk is exactly the stuff that the model(=semantics) has for which there is no interface(=syntax.)  So &quot;junk-freeness&quot; conflicts with selective exposure pretty much by definition.&lt;/p&gt;

&lt;p&gt;Here is a trivial example of a semantics with junk.  Say we have a syntax for addition expressions, Exp ::= NATURAL &#124; Exp + Exp.  If our denotation function has type Exp -&gt; Integer and has the &quot;standard&quot; definition then all the negative integers are junk because our denotation function is not surjective.  There are two main ways to fix this.  We can 1) cut down the semantic domain, e.g. using the naturals instead of the integers or 2) we can expand the syntax so that the extra elements, the junk, becomes expressible, e.g. we can add negation or subtraction.  The latter route isn&#039;t always possible, for example, if our semantic domain had been the reals then there is no way not to have junk without allowing infinite syntax.&lt;/p&gt;

&lt;p&gt;Junk is inversely proportional to precision; the more junk you have, the less precision your semantics has.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>For Jake:  &#8220;Junk-freeness&#8221; is usually called definability or full completeness in denotational semantics.  The &#8220;junk&#8221; terminology comes from, primarily, universal algebra and algebraic semantics.  There the motto is &#8220;no confusion, no junk.&#8221;</p>

<p>Junk is exactly the stuff that the model(=semantics) has for which there is no interface(=syntax.)  So &#8220;junk-freeness&#8221; conflicts with selective exposure pretty much by definition.</p>

<p>Here is a trivial example of a semantics with junk.  Say we have a syntax for addition expressions, Exp ::= NATURAL | Exp + Exp.  If our denotation function has type Exp -&gt; Integer and has the &#8220;standard&#8221; definition then all the negative integers are junk because our denotation function is not surjective.  There are two main ways to fix this.  We can 1) cut down the semantic domain, e.g. using the naturals instead of the integers or 2) we can expand the syntax so that the extra elements, the junk, becomes expressible, e.g. we can add negation or subtraction.  The latter route isn&#8217;t always possible, for example, if our semantic domain had been the reals then there is no way not to have junk without allowing infinite syntax.</p>

<p>Junk is inversely proportional to precision; the more junk you have, the less precision your semantics has.</p>]]></content:encoded>
	</item>
</channel>
</rss>
