Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra) в [info]programming
Что-то похожее есть в Haskell. Но там хитрее (и, по моему, лучше):
Там "классы типов", то есть некий интерфейс, которым обладает тип.
Ну классика:
   class Eq a where (==): a -> a -> Bool

И, скажем, реализация;
   instance Eq a => Eq [a] where a == b = ...

То есть тут instance задает правило для реализации сравнения
списков, если есть сравнение элементов.

Кайф в возможности писать вещи вроде:
count: Eq a => a - > [a] -> Int
count e [] = 0
count e (a:b) | a == e    = 1 + count e b
count e (a:b) | otherwise = count e b


Реализация простая - "предикат" (Eq a => ...) в типе значения (функции)
означает, что у функции есть неявный параметр - табличка с "интерфейсом".
А всякие instance задают правила, позволюще ее получить.

С одной стороны - тут интерфес полностью отвязан от типа (это что-то вроде "точки
зрения на тип"), с другой - все хорошо. Наследованию соотвестует описание
класса, у которого "пререквизитом" является набор других классов.

В приципе - сейчас это навернули до нескольких параметров, так что можно
описывать довольно сложные отношения между типами.

Система мне очень нравится, правда в Haskell как всегда навернули ее
сверх меры.


(Читать комментарии)

Добавить комментарий:

Как:
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Имя пользователя:
Пароль:
Тема:
HTML нельзя использовать в теме сообщения
Сообщение: