Tôi muốn triển khai kịch bản sau đây trong Haskell. Tôi có một bộ đếm được của 'sự kiện' định nghĩa như thế này:Xử lý sự kiện trong Haskell
data MyEvent = Event1
| Event2
| Event3
Tôi muốn xác định xử lý cho những sự kiện này sẽ được sử dụng theo cách sau:
eventLoop :: Handler h => h -> IO()
eventLoop currentHandler = do
event <- getNextEvent
nextHandler <- currentHandler event
eventLoop nextHandler
Về cơ bản tôi muốn xử lý được có thể tự trả lại hoặc xử lý khác để xử lý các sự kiện trong tương lai. Đó là loại xử lý mà tôi không chắc chắn.
ý tưởng đầu tiên của tôi là để xác định xử lý như các chức năng đơn giản, nhưng kiểu của họ sẽ được dài vô hạn:
myHandler :: Event -> IO (Event -> IO (Event -> ...))
Tôi nghi ngờ điều này có thể được giải quyết với một lớp loại, trong đó mỗi bộ xử lý sẽ cần để thực hiện một hàm để xử lý các sự kiện (mà lần lượt trả về một kiểu khác là cùng một lớp), nhưng định nghĩa đệ quy vẫn sẽ áp dụng. Ai đó có thể thông thạo hơn trong hệ thống kiểu điểm tôi đi đúng hướng không? Tôi cũng chào đón bất kỳ sự khác biệt nào về điều này.
Cảm ơn!
Tôi nghĩ 'MyHandler :: [Sự kiện] -> [IO()]' và 'eventLoop :: ([Sự kiện] -> [IO()]) -> IO()' có thể là một cách tiếp cận tốt hơn. – RnMss