Какие приложения, управляемые событиями, реализованы в Haskell?

В последнее время я смотрел на Haskell, и мне показалось, что это очень хороший способ наблюдать за проблемами программирования с альтернативной точки зрения - по крайней мере, альтернативы моему обычному императивному (у меня сильный опыт работы с C ++) взгляду.

Однако все статьи, которые я вижу, похоже, имеют дело с одними и теми же проблемами программирования:

  • Парсеры
  • Компиляторы
  • Проблемы с числовыми вычислениями

Я бы хотел сам попробовать Haskell, написав какое-нибудь приложение с графическим интерфейсом. Следовательно, мне интересно: имеет ли смысл писать системы, управляемые событиями, такие как GUI, на функциональном языке программирования, таком как Haskell? Или это проблемная область, в которой императивные языки преуспевают? К сожалению, мне все еще требуется некоторое время, чтобы переключить свое сознание в «функциональный» режим, поэтому мне трудно решить, выступить ли против или в пользу использования функционального языка программирования для системы, управляемой событиями.

Мне также были бы интересны примеры приложений с графическим интерфейсом (или событийно-управляемых систем в целом), которые реализованы в Haskell.


person Frerich Raabe    schedule 17.01.2010    source источник
comment
Gtk2hs - это привязка Gtk для Haskell.   -  person Hai    schedule 18.01.2010
comment
Вы, сэр, просто слишком вежливы: другие люди всегда спрашивают, можно ли использовать Haskell в реальном мире (чем бы он ни был), тем самым подразумевая, что программисты Haskell не настоящие программисты (что бы это ни означало) . Если вы действительно используете эти ключевые слова вместо событийно-ориентированных, вы действительно найдете множество вопросов и ответов здесь, в StackOverflow.   -  person Jörg W Mittag    schedule 18.01.2010
comment
Например: StackOverflow.Com/questions/1113226   -  person Jörg W Mittag    schedule 18.01.2010
comment
Каков был вывод из этого? Хотите поделиться своим опытом? :)   -  person mihai    schedule 16.09.2014


Ответы (6)


Вот вам пара ключевых слов Google:

  • Функциональное реактивное программирование (FRP), парадигма программирования для хорошо реактивного (также известного как событие -driven) программирование на чисто функциональных языках,
  • Leksah, IDE Haskell, написанная на Haskell,
  • Yi, редактор, подобный Emacs, который заменяет Lisp на Haskell в качестве языка реализации, конфигурации, настройки и написания сценариев,
  • Super Monao Bros. (да, как вы уже догадались, игра в жанре "прыгай и беги")
  • Frag (шутер от первого лица)
  • Чисто функциональные повторные игры - это серия статей в блоге из 4 частей о том, как писать игры в чисто функциональном язык, объясненный на примере Pacman. (Часть 2, Часть 3, Часть 4.)
person Jörg W Mittag    schedule 18.01.2010
comment
Отличная коллекция ссылок! Особенно интересен последний. Благодаря тонну! - person Frerich Raabe; 18.01.2010

xmonad - оконный менеджер X11, написанный на Haskell.

Кроме того, изучение того, как реализованы различные библиотеки графического интерфейса Haskell, может дать некоторое представление о том, как интерактивные программы сделаны на Haskell.

person Justin Smith    schedule 18.01.2010
comment
Да, я уже смотрел библиотеки графического интерфейса Haskell, но у меня возникло странное ощущение, что они были «просто» привязками к API, которые были разработаны с «императивным» мышлением. Я подозреваю, что у программиста с «функциональным» мышлением может быть другой подход к той же проблеме. - person Frerich Raabe; 18.01.2010
comment
FG - это высокоуровневый функциональный подход к составным графическим интерфейсам, основанный на стрелках. FranTk использует поведения и события, концепции из функциональной реактивной анимации Конала Эллиотта. Grapefruit - это декларативная библиотека на основе стрелок. Виджеты, окна и компоненты управления обмениваются данными посредством дискретных и непрерывных сигналов. - эти описания не являются описанием простых привязок. - person Justin Smith; 18.01.2010


Взгляните на эту статью в викиучебнике, это базовая руководство по wxHaskell. В частности, см. раздел «События».

Я рекомендую потратить некоторое время на Haskell и FP в целом, прежде чем приступить к разработке полноценного приложения, чтобы вы могли больше познакомиться с Haskell, поскольку он сильно отличается от C ++.

person Mauricio Scheffer    schedule 18.01.2010
comment
Вы правы в том, что для знакомства с Haskell нужно время. Однако я заметил, что это не так сложно, если вы раньше работали с метапрограммированием шаблонов на C ++. Мета-программирование шаблонов тоже очень декларативно, и вы привыкаете выполнять итерации и т. Д. Без использования состояния (но рекурсии). - person Frerich Raabe; 18.01.2010

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

person Don Stewart    schedule 18.01.2010

«Функциональное реактивное программирование» уже упоминалось, но оно может показаться сложным, если вы смотрите на него впервые (а если вы просматриваете некоторые расширенные статьи, оно будет выглядеть сложным независимо от того, как долго вы его изучали: -)). Однако есть несколько очень хороших статей, которые помогут вам понять это:

  • Составление реактивных анимаций Конала Эллиотта демонстрирует «библиотеку комбинаторов» (общий стиль программирования в функциональных языках ) для описания анимации. Он начинается с очень простых примеров, но во второй части показывает и более интересный «реактивный» бит.

  • Yampa Arcade является более развитым демонстрация функционального реактивного программирования. Он использует некоторые расширенные функции Haskell (например, стрелки), но по-прежнему очень удобочитаем. Заставить его запустить на самом деле может быть сложнее, но это отличное чтение.

  • Книга Пола Худака Haskell School of Expression который учит Haskell с использованием мультимедиа и графики (включая некоторые анимации и т. д.). Это отличное чтение, но на это уходит больше времени, так как это целая книга :-).

Я нахожу свой путь к функциональному программированию через F #, который немного менее «чистый» по сравнению с Haskell, но дает вам полный доступ к библиотекам .NET, поэтому с функционального языка легко использовать «реальные» технологии. . Если вам было интересно, есть несколько примеров в моем блоге.

person Tomas Petricek    schedule 20.01.2010
comment
Ой, очень мило! Спасибо за эти ссылки! Кроме того, спасибо за то, что вы указали, что F # работает и предоставляет доступ к библиотекам .NET! - person Frerich Raabe; 20.01.2010