Подтвердить что ты не робот

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

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

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

  • Парсеры
  • Составители
  • Числовые задачи вычисления

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

Мне также будут интересны примеры приложений GUI (или систем, управляемых событиями, в общем), которые реализованы в Haskell.

4b9b3361

Ответ 1

Вот несколько ключевых слов Google для вас:

  • Функциональное реактивное программирование (FRP), парадигма программирования для хорошо реагирующего (или управляемого событиями) программирования на чисто функциональных языках,
  • Leksah, Haskell IDE, написанная в Haskell,
  • Yi, Emacs-подобный редактор, который заменяет Lisp на Haskell как язык реализации, настройки, настройки и скриптинга
  • Super Monao Bros. (да, вы догадались, игра Jump & Run)
  • Frag (шутер от первого лица)
  • Purely Functional Retrogames - это серия статей из 4-х частей о том, как писать игры на чисто функциональном языке, объясняя использование Pacman как пример. (часть 2, часть 3, часть 4.)

Ответ 2

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

Также, глядя на то, как реализованы различные Библиотеки GUI Haskell, можно дать некоторые идеи о том, как интерактивные программы создаются в Haskell.

Ответ 4

Взгляните на эту статью wikibooks, это базовый wxHaskell. В частности, см. Раздел События.

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

Ответ 5

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

Ответ 6

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

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

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

  • Школа выражения Haskell Paul Hudak - это книга, в которой Haskell преподает с использованием мультимедиа и графики (включая некоторые анимации и т.д.), Это отличное чтение, но требуется больше времени, так как это целая книга: -).

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