[Haskell-cafe] Is this a correct explanation of FRP?
Paul Liu
ninegua at gmail.com
Thu Apr 5 16:57:37 CEST 2012
On Thu, Apr 5, 2012 at 4:30 AM, Ertugrul Söylemez <es at ertes.de> wrote:
> Paul Liu <ninegua at gmail.com> wrote:
>
>> > This isn't switching. It's selection. If fullTime decides to be
>> > productive, then alterTime acts like fullTime. Otherwise it acts
>> > like halfTime. If both inhibit, then alterTime inhibits. This
>> > allows for a much more algebraic description of reactive systems.
>>
>> AFRP can do this through ArrowChoice. Maybe you can explain the
>> concept of "inhibition" in more detail?
>>
>> I fail to grasp why this is making switches obsolete. The idea of
>> switch is to completely abandoning the old state. See the broken
>> pendulum example.
>
> Some of this can be done through ArrowChoice. The difference is
> comparable to why server parts form a monoid in Happstack. You don't
> have to decide when a server part reaches a request. You let the server
> part decide itself. In other words ArrowChoice forces you to deal with
> events in the application itself:
>
> -- Library code:
> x = x'
> y = y'
>
> -- Application code:
> proc inp -> do
> r <- request -< ()
> if p r
> then x -< inp
> else y -< inp
>
> Signal inhibition allows the component wires themselves to deal with the
> events and you as the higher level programmer to just stick the wires
> together:
>
> -- Library code:
> x = proc inp -> do requireReq -< (); x' -< inp
> y = y'
>
> -- Application code:
> x <|> y
I'm curious as to how this plays out with the usual arrow
compositions. How does x *** y behave when x inhibits? what about z
>>> x?
This cannot replace switching though, since the structure of your
arrows cannot change dynamically, while with switches it can.
--
Regards,
Paul Liu
More information about the Haskell-Cafe
mailing list