最近、Erik MeijerらIObservable/IObserver
は、のデュアルがどのようになっているのかを示していますIEnumerable/IEnumerator
。それらがデュアルであるという事実は、一方のインターフェイスでのすべての操作がもう一方のインターフェイスでも有効であることを意味します。したがって、.Netのリアクティブエクステンションの理論的基盤を提供します。
他のデュアルインターフェイスは存在しますか?.Netベースだけでなく、あらゆる例に興味があります。
最近、Erik MeijerらIObservable/IObserver
は、のデュアルがどのようになっているのかを示していますIEnumerable/IEnumerator
。それらがデュアルであるという事実は、一方のインターフェイスでのすべての操作がもう一方のインターフェイスでも有効であることを意味します。したがって、.Netのリアクティブエクステンションの理論的基盤を提供します。
他のデュアルインターフェイスは存在しますか?.Netベースだけでなく、あらゆる例に興味があります。
別の例はとですが、観測量TextReader
とTextWriter
列挙可能値の場合よりもさらに多くのノイズがあります。原則として、型アノテーションは次のようになります。
interface ITextReader {
// Read: void -> int
int Read();
}
interface ITextWriter {
// Write: int -> void
void Write(int val);
}
もう1つの例は、製品タイプABと、2つのタイプAとBの合計タイプA + Bです。Haskellでは、次のように記述できます。
data Prod a b = P a b -- this is the same as the pair type (a,b)
data Sum a b = Left a | Right b -- the same as the Either a b type
詳細はこちらをご覧ください
共変性と反変性は別の例です。おもう。私は間違っている可能性があります。
Bart De Smetは、次のように述べています。エレクトロニクス、コンデンサーとインダクタンスの振る舞いの間には類似点があります。一方を知っていて、ドメイン間を行き来する方法を知っていて、もう一方を知っています。フーリエ計算は、時間ドメインと周波数ドメインの間に双対を提供します。」面白い。
また、System.ReactiveをSystem.Interactiveのデュアルと呼びます。したがって、一方のアセンブリのほとんどの機能は、もう一方のアセンブリではデュアルになっています。明確にするために、IOがIEのデュアルであるだけでなく、それらを操作する機能もデュアル化されています。
したがって、あなたの質問に答えるために、多くの二重化されたインターフェースが存在します。任意のインターフェースを二重化できます。入力と出力、および関数の方向を入れ替えるだけです。役に立たないものもあれば、それ自体の二重になるものもあります。しかし、時には、明らかになるのを待って隠れている本当に強力なものがあります。