Я хотел бы реализовать следующий сценарий в Haskell. У меня есть счетного множества «событий» определен следующим образом:Обработка событий в Haskell
data MyEvent = Event1
| Event2
| Event3
Я хочу, чтобы определить обработчик для этих событий, которые будут использоваться следующим образом:
eventLoop :: Handler h => h -> IO()
eventLoop currentHandler = do
event <- getNextEvent
nextHandler <- currentHandler event
eventLoop nextHandler
В основном я хочу Обработчиков быть в состоянии вернуть себя или другого обработчика в обрабатывать будущие события. Это тип обработчиков, о которых я не уверен.
Моя первая идея состояла в том, чтобы определить обработчики как простые функции, но их тип будет получить бесконечно долго:
myHandler :: Event -> IO (Event -> IO (Event -> ...))
Я подозреваю, что это может быть решена с классом типа, где каждый обработчик нужно будет реализовать функция для обработки событий (которая, в свою очередь, возвращает другой тип того же класса), но рекурсивное определение все равно будет применяться. Может ли кто-нибудь еще лучше разбираться в системе типа, указывайте меня в правильном направлении? Я также приветствую любое другое взятие на этом.
Спасибо!
Я думаю, что MyHandler :: [Событие] -> [IO()] 'и' eventLoop :: ([Event] -> [IO()]) -> IO() 'может быть лучшим подходом. – RnMss