Как говорит сам Haskell Wiki :
Для Haskell существует большое количество библиотек GUI. К сожалению, нет стандартного, и все они более или менее неполны. В целом, шпоны низкого уровня идут хорошо, но они на низком уровне. Абстракции высокого уровня довольно экспериментальны. Необходима поддерживаемая библиотека графического интерфейса пользователя среднего уровня.
Профессор в моем колледже попросил меня и трех других специалистов по информатике рассмотреть возможность работы над библиотекой графического интерфейса для Haskell. Его первоначальной идеей для проекта было написать слой поверх OpenGL, который имитировал морфическую библиотеку, найденную в Smalltalk ; однако, это всего лишь предложение, и другая система определенно заслуживает рассмотрения.
Это подводит нас к актуальному, состоящему из нескольких частей вопросу.
- К какому уровню абстракции должна стремиться наша библиотека? Хаскельская вики явно указывает на то, что библиотека GUI среднего уровня предпочтительнее; однако, библиотека высокого уровня все еще будет приветствоваться.
- На чем должна строиться наша библиотека? (Напр. OpenGL)
- Какую существующую библиотеку графического интерфейса вы хотели бы видеть в нашей библиотеке (если она есть) и почему? (Например, PyGame, Morphic, Swing и т. Д.)
- Какие функции вы бы хотели, чтобы наша библиотека реализовала или не использовала? Например, хорошие люди в Gnome могут утверждать, что кнопка минимизации не нужна.
- Есть ли у вас какие-либо общие предложения?
- Какое умное имя вы бы дали этой воображаемой библиотеке? (Например, HOT - Haskell Opengl Toolkit; HAWT - Haskell Advanced Windowing Toolkit)
Ответы:
Я хотел бы увидеть библиотеку, которая элегантна и проста в использовании с Haskell. Остальные технические детали должны служить этой цели, а не переопределять ее. Таким образом, мои $ 0,02.
Не основывайте его на существующем наборе инструментов , таком как Qt, GTK, FLTK или ... - это сильно ограничит вас и, вероятно, принесет вам гораздо больше боли, чем прибыли. PyQt достаточно забавен и надуман, а Python и C ++ являются чрезвычайно гибкими императивными ОО-языками. Полагаю, в случае с Хаскеллом все было бы гораздо сложнее.
Зависит только от самых основных графических примитивов , а затем опираться на это. OpenGL хорош, но даже что-то более простое (только для 2D, например, SDL) тоже подойдет. Это даст вам максимальную гибкость и максимальную мобильность. См. Smalltalk / Morphic, Java / Swing, TCL / Tk.
Сделайте это концептуально маленьким. Графический интерфейс сложен, нет необходимости добавлять еще один Everest для лазания. Надеюсь, Haskell поможет сделать его компактным и модульным.
Чтобы получить бонусные очки, сделайте его скином. Как минимум, знайте, как применять системные цвета (и только системные цвета) для рисования всего набора элементов управления, чтобы приложение, созданное с помощью этого инструментария, не было занудой. Как максимум, знайте, как заставить Win32 / Gtk / Qt / Cocoa отрисовывать ваши элементы управления, чтобы они выглядели полностью нативно. Основная скинируемость проста и логична; достичь полного внешнего вида довольно сложно.
Кроме того, пожалуйста, запустите root и оставьте управление окнами основной графической системе - X, Windows, что угодно. Невыполнение этого требования поставит под вопрос здравомыслие пользователей и существенно затруднит принятие.
Как обычно, «делайте простые вещи простыми, а сложные вещи возможными» + «избегайте трютинга Тьюринга, где все возможно, но нет ничего интересного, просто« + »сделайте как можно проще, но не проще».
Имя наименее важная вещь. Из всех популярных инструментов GUI только Qt имеет какое-то умное имя. Ряд популярных проектов сменил названия, даже в полете (Firefox, урожденная Firebird). Есть что-то, чтобы назвать, и вы назовете это.
Удачи!
источник
После разговора со всеми участвующими учащимися и предоставления этому вопросу достаточно времени, чтобы вызвать интерес, я считаю, что мы пришли к консенсусу по нескольким ключевым вопросам в моем первоначальном посте.
Мы решили стремиться к библиотеке среднего уровня по предложению Haskell Wiki.
Мы выбрали OpenGL из-за его популярности и поддержки. В качестве основы мы будем использовать проекты-оболочки GLUT или GLFW Haskell.
Мы выбрали Morphic после долгих споров между ним и PyGame. Мы не рассматривали QT или GTK, так как оба уже имеют один или несколько проектов библиотеки Haskell в активной разработке .
Это все еще для обсуждения. Мы решили не рассматривать HAWT и вместо этого смотрим на:
источник