2015-08-26 2 views
1

Я пишу простой текстовый редактор, поэтому я хочу, чтобы иметь что-то вроде этогоКак получить сканкоды нажатых и выпущенных ключей в 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.

+0

AFAIK есть стандартный библиотечный способ доступа к входным данным. Также обратите внимание, что getContents (и по расширению, взаимодействие и друзья) обычно не используются так сильно, потому что у ленивого IO есть склонность к боли в заднице. – Cubic

+0

@ Кубик Не могли бы вы рассказать мне больше о ленивом ИО и о "боли в заднице"? Я новичок в haskell и программировании вообще, поэтому я этого не знаю. – Vanzef

+0

ленивый IO не так уж плохо. Это просто не работает, как вы ожидали. – PyRulez

ответ

1

Если вы действительно хотите простой, а затем проверить эти ответы:

Вы, возможно, придется положить TTY в нестандартном режиме первого для его работы. Второй вопрос требует решения для Windows, но эта же идея должна работать и для Linux.

 Смежные вопросы

  • Нет связанных вопросов^_^