Re[14]: ФП и абстракция списка
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 07.06.07 10:30
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>полиморфные коллекции — это соджержащие объекты разных типов, реализующих общий интерфейс. пусть скажем, это фигуры, которые можно рисовать на экране — треугольники, овалы и т.д. если каждый объект включает свою собственную VMT, то из неё вы узнаёте, как нарисовать это конкретный объект. если же вы перелаёте одну VMT на всё-про всё, то нифига хорошего не выйдет реализация этого требует так называемых existentials, которые включают VMT класса вместе с каждым объектом:


BZ>
BZ>diplayAll1 :: Figure a =>   [a] -> IO ()
BZ>diplayAll2 :: [exist a . Figure a => a] -> IO ()
BZ>


Разве в GHC есть exist? Я думал он через forall делается. Если есть — где почитать?

Насчёт forall — тут уже не будет так однозначно, т.к. тип
[forall a. Figure a => a]
описать можно, но использовать его элементы не получится. Пправда, не знаю почему — читал где-то, что функции не могут быть экзистенциальными, только типы. Т.е.

data Shape = forall a. Figure a => Shape a
displayAll :: [Shape] -> IO ()
displayAll = mapM_ display


уже сработает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.