Comments (3)
As mentioned in my response to issue #17, everything is sun and rainbows concerning the semantics of reactive-banana. :-)
The main point is that rightEvent
happens simultaneously with initialEvent
, there is no time in between where the behavior could change. At least, that's the illusion that reactive-banana will enforce.
The obvious implementations are all correct
(leftEvent, rightEvent) = pair $ behavior <@> initialEvent
pair :: Event (Either a b) -> (Event a, Event b)
pair e = (filterLeft e, filterRight e)
where
filterLeft = fmap fromLeft . filteE isLeft
filterRight = fmap fromRight . filteE isRight
Note that since e
is shared in the second function, the value of type Either a b
will be computed only once. The only thing that happens twice is the test whether it's a Left
or Right
constructor. Not optimal but I think it's ok.
I do agree that partial functions like fromLeft
are somewhat unsightly. Fortunately, they can all be removed by using the filterJust
function mentioned in issue #17.
filterLeft = filterJust . fmap matchLeft
where
matchLeft (Left x) = Just x
matchLeft _ = Nothing
That's another reason to add filterJust
to the API.
from reactive-banana.
Nifty! Thank you very much for the prompt response. :-)
P.S.: You can close the issue anytime you want, or leave it open as a reminder to add some of the functions we discussed to the API.
from reactive-banana.
Ok. I have now added the filterJust
function to the API.
from reactive-banana.
Related Issues (20)
- `reactive-banana` can't be compiled on GHC 9.2 HOT 2
- I created a Matrix channel HOT 8
- An interesting `Applicative`-ish way of combining `Event`s HOT 4
- Add `MonadMoment` instances for all monad transformers in `transformers` HOT 1
- Release 1.3.0.0 HOT 3
- Join Stackage HOT 4
- `Behavior` constantly re-evaluating when caching is expected HOT 4
- Unexpected memory growth HOT 6
- Event handler not seeing early events. HOT 12
- `Behavior`s can hold onto more memory than they need to HOT 2
- Memory leak with dynamic behavior switching HOT 16
- Gloss GUI events not responding HOT 5
- Idea: add a combinator to track when a behavior is a different value HOT 14
- Call `unregister` for garbage collected events made by `AddHandler`. HOT 9
- Discrepancy in model and implementation HOT 15
- Optimize representation of Latch HOT 1
- Not compatible with these-1.2 (disallowed) HOT 2
- Simultaneous events can have undefined behavior within execute HOT 2
- source-code formatter? HOT 2
- Accept deepseq-1.5 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from reactive-banana.