Я пишу простой текстовый редактор, поэтому я хочу, чтобы иметь что-то вроде этогоКак получить сканкоды нажатых и выпущенных ключей в Haskell?
type Scancode = Int
data KeyState = Pressed | Released
newtype InStream = InStream [(Scancode, State)]
main = do
input <- getKeys
parse input
parse :: InStream -> IO()
parse [] = return()
parse (x : xs)
| x == (1, Released) = return()
| otherwise = do
doSomething
parse xs
Как вы могли догадаться, я хочу getKeys
функцию вести себя как getContents
, чтобы иметь непрерывный список сканкоды.
Как я знаю, SDL или даже GTK могут предоставить мне такую функциональность, но есть ли более идиоматические (для haskell и функционального программирования вообще) и с меньшим «накладным» способом делать такую вещь?
P.S. Если это имеет значение, я хочу использовать свой «редактор» под Linux как в консоли (tty), так и в X11/Wayland.
AFAIK есть стандартный библиотечный способ доступа к входным данным. Также обратите внимание, что getContents (и по расширению, взаимодействие и друзья) обычно не используются так сильно, потому что у ленивого IO есть склонность к боли в заднице. – Cubic
@ Кубик Не могли бы вы рассказать мне больше о ленивом ИО и о "боли в заднице"? Я новичок в haskell и программировании вообще, поэтому я этого не знаю. – Vanzef
ленивый IO не так уж плохо. Это просто не работает, как вы ожидали. – PyRulez