Полиморфизм подтипов в Haskell

Построение иерархии классов виджетов графического интерфейса — стандартное упражнение в объектно-ориентированном -программировании. У вас есть какой-то абстрактный Widgetкласс с абстрактным подклассом для виджетов, которые могут содержать другие виджеты, а затем у вас есть множество дополнительных абстрактных классов для виджетов, поддерживающих текстовое отображение, виджетов, поддерживающих фокус ввода, виджетов, которые иметь логическое состояние, вплоть до реальных конкретных классов, таких как кнопки, ползунки, полосы прокрутки, флажки и т. д.

Мой вопрос: :Как лучше всего это сделать в Haskell?

Есть ряд вещей, которые затрудняют создание графического интерфейса пользователя на Haskell, но не являются частью моего вопроса. Интерактивный ввод-вывод в Haskell довольно сложен. Реализация графического интерфейса почти всегда означает написание оболочки для библиотеки C или C++ чрезвычайно низкого -уровня. И люди, пишущие такие оболочки, склонны копировать существующий API дословно (, по-видимому, поэтому любой, кто знаком с обернутой библиотекой, будет чувствовать себя как дома ). Эти проблемы меня сейчас не интересуют. Меня интересует исключительно то, как лучше всего моделировать полиморфизм подтипов в Haskell.

Какие свойства мы хотели бы получить от нашей гипотетической библиотеки GUI? Ну, мы хотим, чтобы можно было добавлять новые типы виджетов в любое время. (Другими словами, закрытый набор возможных виджетов не годится. )Мы хотим свести к минимуму дублирование кода. (Существует множество типов виджетов! )В идеале мы хотим иметь возможность указывать один конкретный тип виджета, когда это необходимо, но также иметь возможность обрабатывать наборы виджетов любого типа, если это необходимо.

Все вышеизложенное, конечно, тривиально для любого само -уважающего объектно-ориентированный язык.Но как лучше всего это сделать в Haskell? Я могу придумать несколько подходов, но я не уверен, какой из них будет «лучшим».

31
задан MathematicalOrchid 17 August 2012 в 09:13
поделиться