package edu.neu.ccs.demeterf.lib; import edu.neu.ccs.demeterf.lib.*; extern interface Comparable(X) = . nogen List(X) = Cons(X) | Empty(X). nogen Cons(X) = X *s List(X). nogen Empty(X)= . nogen Option(X)= Some(X) | None(X). nogen Some(X) = X. nogen None(X) = . nogen RBColor = RED | BLACK. nogen RED = "red". nogen BLACK = "black". nogen RBTree(X:Comparable(X)) = RBNode(X) | RBLeaf(X). nogen RBLeaf(X:Comparable(X)) = . nogen RBNode(X:Comparable(X)) = "(node" *s RBColor *s X *s RBTree(X) *s RBTree(X) ")". nogen Entry(K:Comparable(K),V) = "(" K *s "->" *s V ")" implements Comparable(Entry(K,V)). nogen Map(K:Comparable(K),V) = "[" *s RBTree(Entry(K,V)) *s "]". nogen Wrap(X:Comparable(X)) = X implements Comparable(Wrap(X)). nogen Set(X:Comparable(X)) = "{" *s RBTree(Wrap(X)) *s "}". nogen ListSet(X:Comparable(X)) = List(Wrap(X)). nogen ListMap(K:Comparable(K),V) = "[" *s List(Entry(K,V)) *s "]".