Я хотел бы реализовать следующий сценарий в 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 -> ... ))
Я подозреваю, что это можетбыть решена с помощью класса типов, где каждый обработчик должен будет реализовать функцию для обработки событий (которая, в свою очередь, возвращает другой тип того же класса), но рекурсивное определение все равно будет применяться.Может ли кто-то более хорошо разбирающийся в системе типов указать мне правильное направление?Я также приветствую любые другие варианты этого.
Спасибо!