Introduce a visibility boundary inside of set module

In preparation for adding an UnorderedSet.
diff --git a/syntax/set.rs b/syntax/set.rs
index 73e3909..ee490e9 100644
--- a/syntax/set.rs
+++ b/syntax/set.rs
@@ -1,55 +1,61 @@
-use std::borrow::Borrow;
-use std::collections::HashSet;
 use std::fmt::{self, Debug};
-use std::hash::Hash;
 use std::slice;
 
-pub struct OrderedSet<T> {
-    set: HashSet<T>,
-    vec: Vec<T>,
-}
+pub use self::ordered::OrderedSet;
 
-impl<'a, T> OrderedSet<&'a T>
-where
-    T: Hash + Eq,
-{
-    pub fn new() -> Self {
-        OrderedSet {
-            set: HashSet::new(),
-            vec: Vec::new(),
+mod ordered {
+    use super::Iter;
+    use std::borrow::Borrow;
+    use std::collections::HashSet;
+    use std::hash::Hash;
+
+    pub struct OrderedSet<T> {
+        set: HashSet<T>,
+        vec: Vec<T>,
+    }
+
+    impl<'a, T> OrderedSet<&'a T>
+    where
+        T: Hash + Eq,
+    {
+        pub fn new() -> Self {
+            OrderedSet {
+                set: HashSet::new(),
+                vec: Vec::new(),
+            }
+        }
+
+        pub fn insert(&mut self, value: &'a T) -> bool {
+            let new = self.set.insert(value);
+            if new {
+                self.vec.push(value);
+            }
+            new
+        }
+
+        pub fn contains<Q>(&self, value: &Q) -> bool
+        where
+            &'a T: Borrow<Q>,
+            Q: ?Sized + Hash + Eq,
+        {
+            self.set.contains(value)
+        }
+
+        pub fn get<Q>(&self, value: &Q) -> Option<&'a T>
+        where
+            &'a T: Borrow<Q>,
+            Q: ?Sized + Hash + Eq,
+        {
+            self.set.get(value).copied()
         }
     }
 
-    pub fn insert(&mut self, value: &'a T) -> bool {
-        let new = self.set.insert(value);
-        if new {
-            self.vec.push(value);
+    impl<'s, 'a, T> IntoIterator for &'s OrderedSet<&'a T> {
+        type Item = &'a T;
+        type IntoIter = Iter<'s, 'a, T>;
+        fn into_iter(self) -> Self::IntoIter {
+            Iter(self.vec.iter())
         }
-        new
-    }
-
-    pub fn contains<Q>(&self, value: &Q) -> bool
-    where
-        &'a T: Borrow<Q>,
-        Q: ?Sized + Hash + Eq,
-    {
-        self.set.contains(value)
-    }
-
-    pub fn get<Q>(&self, value: &Q) -> Option<&'a T>
-    where
-        &'a T: Borrow<Q>,
-        Q: ?Sized + Hash + Eq,
-    {
-        self.set.get(value).copied()
-    }
-}
-
-impl<'s, 'a, T> IntoIterator for &'s OrderedSet<&'a T> {
-    type Item = &'a T;
-    type IntoIter = Iter<'s, 'a, T>;
-    fn into_iter(self) -> Self::IntoIter {
-        Iter(self.vec.iter())
     }
 }