Отправка сообщения во время выполнения кода Gloss в Haskell - PullRequest
0 голосов
/ 14 января 2019

Haskell playIO имеет следующий тип:

 playIO:: Display   
-> Color    background color
-> Int  
-> world    --initial world 
-> (world -> IO Picture)  -- function to change world into a picture    
-> (Event -> world -> IO world) --event handler function
-> (Float -> world -> IO world) -- The function to update the world after the given time 
-> IO ()

Как только вы наберете playIO внутри main, он будет непрерывно обновлять графический интерфейс, который моделируется world. В случае, если что-то произошло внутри кода, который обрабатывает события (см. Комментарии к коду) или функции, которая обновляет мир, и вы хотите вывести сообщение (не обязательно ошибка), какой подход можно использовать, не нарушая типы? Нужно ли было бы отключить функцию playIO, чтобы отобразить мое сообщение, и если да, то как это сделать?

1 Ответ

0 голосов
/ 14 января 2019

Если вы хотите, скажем, отправить сообщение, основанное на событии, поместите эту операцию в обработчик события. Например:

main :: IO ()
main = playIO black 100 world0 renderWorld handleEvent updateWorld

handleEvent evt w =
    do print event -- Right here, you are emitting a message!
       updateWorldWithEvent evt w
       putStrLn "I have updated the world, now time for breakfast."

Просто имейте в виду, что операция handleEvent потенциально может происходить довольно часто, поэтому выберите соответствующий вывод.

...