I'm new to Haskell, so this is more a high-level conceptual question. I've read this: https://wiki.haskell.org/Real_World_Applications/Event_Driven_Applications and it has this:
run :: Domain -> [Event] -> IO () run dm  = do events <- uiUpdate dm run dm events run _ (EventExit:_) = return () run dm (e:es) = run (dmUpdate dm e) es
So uiUpdate would "generate" events in this case.
I am trying to understand how this works in an application where you need to push events. An example - say you have a GUI where you have a single int counter and three types of event sources:
- Human interaction
For simplicity, say the counter needs to be increased or decreased whenever any kind of event happens (e.g. new file added or deleted, HTTP call succeeded or failed, human typed on a keyboard or clicked with a mouse).
How do you push these events into the event loop? Most importantly, I'm not asking for "here's how you can do it", but "here's how real world Haskell applications work". Especially if there are different options that are used in practice.