[Haskell-cafe] Do you recognize this type?
Corentin Dupont
corentin.dupont at gmail.com
Fri Jun 20 12:59:41 UTC 2014
Nobody on that?
What I really want is: a computation that can be interrupted if enough
result is already there.
I would be surprise if that concept doesn't exist already somewhere :)
On Thu, Jun 19, 2014 at 5:17 PM, Corentin Dupont <corentin.dupont at gmail.com>
wrote:
> Hi guys,
> I am making a DSL for event composition (inspired from digestive-functor &
> reactive-banana) and I find myself wanting a primitive like that:
>
> -- given a list of events, evaluate the function on those that have
> already fired.
> -- returns an event yelding the result when ready.
> ListEvent :: [Event a] -> ([a] -> Maybe b) -> Event b
>
> Does this type tell you something? Is there a better abstraction that can
> encompass it?
> My DSL is like that:
>
> -- | Composable events
> data Event a where
> SumEvent :: Event a -> Event a -> Event a -- The first event
> to fire will be returned
> AppEvent :: Event (a -> b) -> Event a -> Event b -- Both events
> should fire, and then the result is returned
> PureEvent :: a -> Event a -- Create a fake
> event. The result is useable with no delay.
> EmptyEvent :: Event a -- An event that is
> never fired.
> BaseEvent :: (Typeable a) => Field a -> Event a -- Embed a base event
>
> It's easy to define instances for Applicative and Alternative.
> But then I have a use case that I cannot solve:
> In the case of votations (which use this DSL), sometime you can end
> prematuraly the voting, even if not everybody voted yet: for example if the
> majority is already reached.
> In this case no need to wait for everybody, we can end the vote.
>
> This does not seem to be possible with Applicative or Monad interfaces:
> things have to be sequenced in a monad, they cannot be evaluated in
> parralel.
> For example:
>
> do
> v1 <- getVote1
> v2 <- getVote2
> v3 <- getVote3
> evalMajority(v1, v2, v3)
>
> In this example I have to wait for all 3 votes to be completed, but in
> fact only two would suffice to achieve majority.
> That's why I added "ListEvent" to the DSL above which allow to achieve
> that but I'm wondering if there is a better/bigger abstraction to put it in.
>
> Thanks!!
> Corentin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140620/315161c8/attachment.html>
More information about the Haskell-Cafe
mailing list