Полез в исходники сабжа. Смотрю, например, файл gtk2hs-0.9.12.1\gtk\Graphics\UI\Gtk\Buttons\Button.chs.pp, есть декларация
module Graphics.UI.Gtk.Buttons.Button (
[...]
-- * Types
Button,
ButtonClass,
[...]
Где собственно сами описания типа и класса?
А полез я туда вот почему. В ООП языках, на сколько я понимаю, класс это некая структура данных, с которой "ассоциированы" некие процедуры (которые называются методами). Однако в Хаскеле класс — это класс типов
Класс в Хаскеле не хранит никаких данных, он своего рода интерфейс, который определяет что можно делать с данными. А структура данных описывается отдельно от класса. При этом сами структуры данных не наследуются (???) друг от друга.
Т.е. система классов в ООП языках и Хаскеле устроены совсем по разному. И тут возник вопрос: каким образом gtk, на сколько я понимаю реализованный в традициях ООП, наложен поверх совсем не похожих классов Хаскелла???
Более практическая формулировка: как мне создать свой графический компонент, расширяющий класс Widget, а от моего компонента создать еще один класс-потомок и т.д.???