Vorrei implementare il seguente scenario in Haskell. Ho un enumerabile serie di 'eventi' definiti in questo modo:Gestione degli eventi in Haskell
data MyEvent = Event1
| Event2
| Event3
voglio definire i gestori per questi eventi da utilizzare nel seguente modo:
eventLoop :: Handler h => h -> IO()
eventLoop currentHandler = do
event <- getNextEvent
nextHandler <- currentHandler event
eventLoop nextHandler
Fondamentalmente voglio gestori di essere in grado di restituire se stessi o un altro gestore a gestire gli eventi futuri. È il tipo di gestore di cui non sono sicuro.
La mia prima idea era quella di definire i gestori di come funzioni semplici, ma il loro tipo sarebbe ottenere infinitamente lungo:
myHandler :: Event -> IO (Event -> IO (Event -> ...))
ho il sospetto che questo può essere risolto con una classe tipo, in cui ogni gestore avrebbe bisogno implementare una funzione per gestire gli eventi (che a sua volta restituisce un altro tipo di della stessa classe), ma la definizione ricorsiva si applicherebbe comunque. Può qualcuno più esperto nel sistema di tipi indicarmi la giusta direzione? Inoltre, accolgo con favore ogni diversa interpretazione.
Grazie!
Penso che 'MyHandler :: [Event] -> [IO()]' e 'eventLoop :: ([Event] -> [IO()]) -> IO()' potrebbe essere un approccio migliore. – RnMss