[Haskell-cafe] Instances for continuation-based FRP
Conal Elliott
conal at conal.net
Wed Apr 24 02:18:33 CEST 2013
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<http://conal.net/papers/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 <hans at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130423/c27e28c4/attachment.htm>
More information about the Haskell-Cafe
mailing list