Gtk2hs + классы = взрыв мозга!
От: Аноним  
Дата: 16.06.08 15:06
Оценка:
Полез в исходники сабжа. Смотрю, например, файл gtk2hs-0.9.12.1\gtk\Graphics\UI\Gtk\Buttons\Button.chs.pp, есть декларация

module Graphics.UI.Gtk.Buttons.Button (
[...]
-- * Types
  Button,
  ButtonClass,
[...]


Где собственно сами описания типа и класса?

А полез я туда вот почему. В ООП языках, на сколько я понимаю, класс это некая структура данных, с которой "ассоциированы" некие процедуры (которые называются методами). Однако в Хаскеле класс — это класс типов Класс в Хаскеле не хранит никаких данных, он своего рода интерфейс, который определяет что можно делать с данными. А структура данных описывается отдельно от класса. При этом сами структуры данных не наследуются (???) друг от друга.

Т.е. система классов в ООП языках и Хаскеле устроены совсем по разному. И тут возник вопрос: каким образом gtk, на сколько я понимаю реализованный в традициях ООП, наложен поверх совсем не похожих классов Хаскелла???

Более практическая формулировка: как мне создать свой графический компонент, расширяющий класс Widget, а от моего компонента создать еще один класс-потомок и т.д.???
Re: Gtk2hs + классы = взрыв мозга!
От: pierre  
Дата: 16.06.08 15:23
Оценка:
А>Т.е. система классов в ООП языках и Хаскеле устроены совсем по разному. И тут возник вопрос: каким образом gtk, на сколько я понимаю реализованный в традициях ООП, наложен поверх совсем не похожих классов Хаскелла???

В некотором роде, таким же образом как и наложен поверх Си, а именно: извращениями.
Re: Gtk2hs + классы = взрыв мозга!
От: geniepro http://geniepro.livejournal.com/
Дата: 16.06.08 20:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Т.е. система классов в ООП языках и Хаскеле устроены совсем по разному. И тут возник вопрос: каким образом gtk, на сколько я понимаю реализованный в традициях ООП, наложен поверх совсем не похожих классов Хаскелла???


В чисто процедурном стиле, как в Си (примерно)...
Re: Gtk2hs + классы = взрыв мозга!
От: BulatZiganshin  
Дата: 21.06.08 22:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Т.е. система классов в ООП языках и Хаскеле устроены совсем по разному. И тут возник вопрос: каким образом gtk, на сколько я понимаю реализованный в традициях ООП, наложен поверх совсем не похожих классов Хаскелла???


он реализован скорей как раз в традициях type classes. afaik, классы gtk — это просто интерфейсы, никакого наследования данных (видимого пользователю) там нет
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Gtk2hs + классы = взрыв мозга!
От: Аноним  
Дата: 24.06.08 12:28
Оценка:
BZ>он реализован скорей как раз в традициях type classes. afaik, классы gtk — это просто интерфейсы, никакого наследования данных (видимого пользователю) там нет

А как тогда создавать свои компоненты с возможностью повторного использования кода?
Re[3]: Gtk2hs + классы = взрыв мозга!
От: BulatZiganshin  
Дата: 30.06.08 13:15
Оценка:
Здравствуйте, Аноним, Вы писали:

BZ>>он реализован скорей как раз в традициях type classes. afaik, классы gtk — это просто интерфейсы, никакого наследования данных (видимого пользователю) там нет


А>А как тогда создавать свои компоненты с возможностью повторного использования кода?


сам бы хотел узнать в приницпе в хаскеле это делается так:

1. повторное использование достигается только созданием глобальных полиморфных функций. учти, что это не классы и ты не можешь унаследовать поля из существующего класса

2. затем берёшь интерфейс, который тебе нужно реализовать, и объявляешь свой тип его инстанцией

очень условный пример, где мы создаём виджеты для отображения Int и Integer:
read_value :: (Show a) =>  IORef a -> IO String
read_value var = do val <- readIORef a
                    return (show val)
write_value .... - аналогично

instance Widget (IORef Int) where
  getValue = read_value 
  setValue = write_value

instance Widget (IORef Integer) where
  getValue = read_value 
  setValue = write_value
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Gtk2hs + классы = взрыв мозга!
От: Аноним  
Дата: 01.07.08 07:07
Оценка:
BZ>сам бы хотел узнать в приницпе в хаскеле это делается так:

Много читал, долго думал... Вобщем придумал как прикрутить ООП, и... получился полный ужос...

Сейчас смотрю в сторону Fudgets, кто-нибудь пробовал сие чудо? Как оно? Вожможно на нем писать крупные коммерческие приложения? Как там с повторным использованием кода?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.