Было проведено много исследований способов создания графических интерфейсов на функциональном языке. Существуют библиотеки для push / pull frp, frp на основе стрелок и, возможно, других превосходных исследований. Многие люди, похоже, согласны с тем, что это более естественный способ, но, похоже, почти все с использованием библиотек императивного связывания, таких как gtk2hs и wxhaskell. Даже места, рекомендованные как хорошие руководства обучают привязке к этим простым императивным библиотекам. Почему не guis, основанный на исследовании FRP?
Где пользователи функционального графического интерфейса?
Ответы (3)
С момента моего предыдущего ответа прошел почти год, и все изменилось в мире функционального реактивного программирования (FRP).
В частности, я создал reactive-banana, небольшую библиотеку для FRP на Haskell. Хотя по-прежнему отсутствуют некоторые функции, это уже отличный способ реализовать графический интерфейс в чисто функциональном стиле, о чем свидетельствует сборник примеров. Вот скриншот:
Как и прежде, существует также Flapjax, библиотека JavaScript для FRP в веб-браузере.
Хотя все согласны с тем, что функциональное реактивное программирование (FRP) - это способ реализации графического пользовательского интерфейса, всесторонняя библиотека для этого в Haskell еще не появилась. Думаю, основные причины:
- Трудно найти баланс между выразительностью и использованием ресурсов (нехватка места, проблемы с синхронизацией). Чем выразительнее ваша модель FRP, тем сложнее ее реализовать, при этом обеспечивая эффективность. Пространство дизайна все еще исследуется.
- Удобство API. FRP хорошо подходит для реализации функций вида
Time -> MouseInput -> Picture
, но платформы с графическим интерфейсом пользователя, такие как GTK + или Cocoa, так не работают, и вопрос в том, как выразить последнее в стиле FRP, не усложняя его, чем в традиционном стиле.
Другими словами, исследование FRP еще не завершено.
При этом уже существуют некоторые практические реализации, например Flapjax, язык, который компилируется в JavaScript.
В любом случае, никто не может помешать вам реализовать собственную библиотеку FRP, предназначенную для конкретной цели, и получить от этого большую прибыль. Люк Палмер успешно справился с этой задачей. , и сейчас я тоже пытаюсь это сделать. (Я бы предпочел потратить свое время на FRP, чем на изменяемые переменные.)
Старая ветка, я знаю, но Elm (elm-lang.org) быстро становится центром "реального мира" "FRP. Он компилируется до JavaScript, и на нем написан веб-сайт Elm.