#line 6 "/home/ubuntu/felix/src/packages/streams.fdoc"
class Iterable [C1, V] {
virtual fun iterator : C1 -> 1 -> opt[V];
}
class Streamable[C1, V] {
inherit Iterable[C1,V];
virtual fun \(\subseteq\)[C2 with Set[C2,V]] (x:C1, y:C2) =
{
for v in x do
if not (v \(\in\) y) goto bad;
done
return true;
bad:>
return false;
}
fun \(\subseteqq\) [C2 with Set[C2,V], Streamable[C2,V]]
(x:C1, y:C2) => x \(\subseteq\) y
;
virtual fun \(\cong\)[C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\subseteq\) y and y \(\subseteq\) x
;
fun \(\ncong\)[C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => not (x \(\cong\) y)
;
virtual fun \(\subset\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\subseteq\) y and x \(\ncong\) y
;
fun \(\subsetneq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\subset\) y
;
fun \(\subsetneqq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\subset\) y
;
fun \(\supset\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => y \(\subset\) x
;
fun \(\supseteq\) [C2 with Set[C2,V], Streamable[C2,V]]
(x:C1, y:C2) => y \(\subseteq\) x
;
fun \(\supseteqq\) [C2 with Set[C2,V], Streamable[C2,V]]
(x:C1, y:C2) => y \(\subseteq\) x
;
fun \(\supsetneq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\supset\) y
;
fun \(\supsetneqq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => x \(\supset\) y
;
fun \(\nsubseteq\) [C2 with Set[C2,V], Streamable[C2,V]]
(x:C1, y:C2) => not (x \(\subseteq\) y)
;
fun \(\nsubseteqq\) [C2 with Set[C2,V], Streamable[C2,V]]
(x:C1, y:C2) => not (x \(\subseteq\) y)
;
fun \(\nsupseteq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => not (x \(\supseteq\) y)
;
fun \(\nsupseteqq\) [C2 with Set[C2,V], Streamable[C2,V], Set[C1,V]]
(x:C1, y:C2) => not (x \(\supseteq\) y)
;
}