Is FPH implemented in GHC?

Wolfgang Jeltsch g9ks157k at acme.softbase.org
Thu Sep 11 07:58:32 EDT 2008


Am Donnerstag, 11. September 2008 00:09 schrieben Sie:
> >If an FRP library provides first-class signals then often the problem
> > arises that these are actually signal generators—their behavior might
> > depend on the time they are started.  To get rid of this deficiency, my
> > signal types now have an additional type argument which denotes the
> > starting time.  This way, I’m able to fix the starting time using the
> > type system.  The idea is similar to the usage of the “state” type
> > argument of ST.
>
> Dependencies on an absolute clock always caused trouble in
> Fran/FRP programming and were one of the things I tried to get
> rid of in my FunWorlds experiments (sigh, way too long ago..).

Hmm, maybe you misunderstood.  The extra type argument cannot be instantiated 
to the current time since that would need dependent types or something 
similar.  Actually, we never instantiate this argument but only force it to 
be independent to other such time arguments via forall, and force it to be 
equal to other such time arguments by using the same type variable multiple 
times in the same type.  So the whole thing is only about whether something 
happens at the same time or not.

It’s really similar to the first ST type argument without using RealWorld.  
You never instantiate it, you just put constraints on it in the form that it 
has to be equal to some other such argument.

> Thinking of behaviours as functions from *all* times to values is
> an unimplementable theoretical ideal and completely at odds with
> FRP's more practical ideal of compositional programming (leading
> to the less sung about "arts" of actual programming in FRP, aging
> behaviours, start times, etc.).

At least, I try to help the FRP programmer to get aging etc. right by using 
the time argument trick to make wrong signal use result in a type error.  In 
Grapefruit, a signal is a function from a time *interval* to values where the 
time interval is denoted by this type argument.

> […]

> Many of the FunWorlds aspects would need revision, if I ever
> get round to that.. but dropping absolute time was the right thing
> to do (as if physics hadn't told us about that anyway;-).

In Grapefruit, you could implement a continous signal which represents an 
absolute clock.  This is because you can make a continuous signal out of any 
continuous source that can be asked to tell its current value by means of an 
I/O action.  But absolute time isn’t fundamental to Grapefruit.

You could think of some totally ordered set representing time and continuous 
signals being functions from this set to values.  But you can only access 
continuous signals by sampling them using a discrete signal.  So you can only 
get the value of a continous signal at those times where some event occurs.  
You have the advantage that you can abstract from sampling rates and similar 
stuff by composing continuous signals.  But at some point you have to sample 
explicitely.

> Claus

Best wishes,
Wolfgang


More information about the Glasgow-haskell-users mailing list