LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

http://www.cs.uwm.edu/~boyland/fool2012/papers/fool2012_submission_3.pdf — как раз на основе подмножеств, пересечений, объединений и т.п., так что просто обязательно к ознакомлению :)

http://www.reddit.com/r/haskell/comments/1pjjy5/odersky_the_trouble_with_type...

А вот если смешивать агрегацию полей и наследование интерфейсов, как в C++, то действительно иногда возникают весёлые ситуации (например, делаем MaybeA : A и обеспечиваем хорошую (но не тривиальную) агрегацию и правильные публичные конструкторы, но забываем удалить или переопределить метод(ы) из AIface, так что MaybeAIface в итоге может ломать объекты — он же содержит методы которые для A предполагались).

Ещё вариант — простая агрегация и простые интерфейсы отдельно, как в Haskell (data A агрегируется в data MaybeA, при этом отдельный интерфейс в виде class Iface никак неявно ничего не ломает, так как требуется явного расписывания для A и MaybeA).

Исходная версия quasimoto, :

http://www.cs.uwm.edu/~boyland/fool2012/papers/fool2012_submission_3.pdf — как раз на основе подмножеств, пересечений, объединений и т.п., так что просто обязательно к ознакомлению :)

http://www.reddit.com/r/haskell/comments/1pjjy5/odersky_the_trouble_with_type...

А вот если смешивать агрегацию полей и наследование интерфейсов, как в C++, то действительно иногда возникают весёлые ситуации (например, делаем MaybeA : A и обеспечиваем хорошую (но не тривиальную) агрегацию и правильные публичные конструкторы, но забываем удалить или переопределить метод(ы) из AIface, так что MaybeAIface в итоге может ломать объекты — он же для A предполагался).

Ещё вариант — простая агрегация и простые интерфейсы отдельно, как в Haskell (data A агрегируется в MaybeA, при этом отдельный интерфейс в виде класса типов Iface никак неявно ничего не ломает, так как требуется явного расписывания для A и MaybeA).