Hi Conal, Thank you for replying.
My aim is to find the simplest possible implementation of the semantics you describe in Push-pull FRP, so the denotational semantics are already in place. I guess what I am looking for is a simple translation of a denotational program into an imperative one. My intuition tells me that such a translation is possible, maybe even trivial, but I am not sure how to reason about correctness. While I like the idea of TCMs very much, they do not seem to be applicable for things that lack a denotation, such as IO. Maybe it is a question of how to relate denotational semantics to operational ones? Hans On 24 apr 2013, at 02:18, Conal Elliott wrote: > Hi Hans, > > Do you have a denotation for your representation (a specification for your > implementation)? If so, it will likely guide you to exactly the right type > class instances, via the principle of type class morphisms (TCMs). If you > don't have a denotation, I wonder how you could decide what correctness means > for any aspect of your implementation. > > Good luck, and let me know if you want some help exploring the TCM process, > > -- Conal > > > On Tue, Apr 23, 2013 at 6:22 AM, Hans Höglund <h...@hanshoglund.se> wrote: > Hi everyone, > > I am experimenting with various implementation styles for classical FRP. My > current thoughts are on a continuation-style push implementation, which can > be summarized as follows. > > > newtype EventT m r a = E { runE :: (a -> m r) -> m r -> m r } > > newtype ReactiveT m r a = R { runR :: (m a -> m r) -> m r } > > type Event = EventT IO () > > type Reactive = ReactiveT IO () > > The idea is that events allow subscription of handlers, which are > automatically unsubscribed after the continuation has finished, while > reactives allow observation of a shared state until the continuation has > finished. > > I managed to write the following Applicative instance > > > instance Applicative (ReactiveT m r) where > > pure a = R $ \k -> k (pure a) > > R f <*> R a = R $ \k -> f (\f' -> a (\a' -> k $ f' <*> a')) > > But I am stuck on finding a suitable Monad instance. I notice the similarity > between my types and the ContT monad and have a feeling this similarity could > be used to clean up my instance code, but am not sure how to proceed. Does > anyone have an idea, or a pointer to suitable literature. > > Best regards, > Hans > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe