Недавно у Erik Meijer и других есть шоу как IObservable/IObserver
двойной из IEnumerable/IEnumerator
. То, что они являются двойными, означает, что любая операция в одном интерфейсе допустима на другом, таким образом обеспечивая теоретическую основу Реактивных Расширений для .NET
Другие двойные интерфейсы существуют? Я интересуюсь любым примером, не просто базирующимся .NET.
Другой пример будет Textreader
и TextWricer
, хотя есть еще больше шума, чем в случае наблюдателей и перечислимые. В принципе типовые подписи были бы:
interface ITextReader {
// Read: void -> int
int Read();
}
interface ITextWriter {
// Write: int -> void
void Write(int val);
}
Другой пример - тип продукта A.B и суммарный тип A+B двух типов A и B. В Хаскелле их можно записать как:
данные Prod a b = P a b -- это то же самое, что и тип пары (a,b)
данные Sum a b = Left a | Right b -- то же самое, что и Either a type
check here for details
.Ковариация и контравариантность - еще один пример. Думаю. Я могу ошибаться.
Барт Де Смет говорит : «В различных дисциплинах существует множество дуальностей, обеспечивающих отличную передачу знаний между различными областями. Например, в формальной логике закон Де Моргана позволяет преобразовывать выражения, построенные из союзов, в выражения, построенные из дизъюнкций. и наоборот. В электронике существует сходство между поведением конденсаторов и индуктивностей: знаете одно и как перемещаться между доменами, а вы знаете другое. Исчисление Фурье обеспечивает двойственность между временной и частотной областями ». Интересно.
Они также называют System.Reactive двойником System.Interactive. Таким образом, большинство функций в одной из сборок двойственны в другой. Чтобы уточнить, не только IO является двойником IE, но и функции, которые работают с ними, также двойственны.
Итак, отвечу на ваш вопрос: существует множество дуальных интерфейсов. Вы можете дуализировать любой интерфейс. Вы просто меняете местами входы и выходы и направление функции. Некоторые из них бесполезны или будут двойственны сами по себе. Однако иногда скрываются действительно могущественные, ожидающие раскрытия.