Sono nuovo di Haskell, quindi questa è più una domanda concettuale di alto livello. Ho letto questo: link e ha questo:
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
Quindi uiUpdate genererebbe "eventi" in questo caso.
Sto cercando di capire come funziona in un'applicazione in cui è necessario spingere gli eventi. Un esempio: diciamo che hai una GUI in cui hai un contatore int singolo e tre tipi di fonti di eventi:
- Filesystem
- Rete
- Interazione umana
Per semplicità, diciamo che il contatore deve essere aumentato o diminuito ogni volta che accade un qualsiasi tipo di evento (ad es. nuovo file aggiunto o cancellato, chiamata HTTP riuscita o fallita, umano digitato su una tastiera o cliccato con un mouse).
Come si spinge questi eventi nel ciclo degli eventi? Soprattutto, non sto chiedendo "ecco come puoi farlo", ma "ecco come funzionano le applicazioni Haskell del mondo reale". Soprattutto se ci sono diverse opzioni che vengono utilizzate nella pratica.