Me gustaría implementar la siguiente situación en Haskell. Tengo una conjunto numerable de 'eventos' se definen así:Manejo de eventos en Haskell
data MyEvent = Event1
| Event2
| Event3
quiero definir manejadores de estos eventos que se utilizarán de la siguiente manera:
eventLoop :: Handler h => h -> IO()
eventLoop currentHandler = do
event <- getNextEvent
nextHandler <- currentHandler event
eventLoop nextHandler
Básicamente quiero manipuladores sean capaz de devolver ellos mismos u otro controlador al manejar futuros eventos. Es el tipo de manejadores del que no estoy seguro.
Mi primera idea era definir manipuladores como funciones simples, pero su tipo sería obtener infinitamente largo:
myHandler :: Event -> IO (Event -> IO (Event -> ...))
Sospecho que esto se puede resolver con un tipo de clase, donde cada controlador necesitaría para implementar una función para manejar eventos (que a su vez devuelve otro tipo de la misma clase), pero la definición recursiva aún se aplicaría. ¿Puede alguien más versado en el sistema de tipo señalarme en la dirección correcta? También bienvenida cualquier toma diferente en esto.
Gracias!
Creo que 'MyHandler :: [Event] -> [IO()]' y 'eventLoop :: ([Event] -> [IO()]) -> IO()' podría ser un mejor enfoque. – RnMss