       (: (Fn Char String String))
       (Js.binary "+" what to)))
 
+  Set (class [set item]
+    elem? (fn [what in]
+      (: (Fn item set Bool))
+      (# Whether in contains what .)))
+
+  set-set (instance (Set (Set a) a)
+    elem? (macro [what in]
+      (: (Fn (Set a) a Bool))
+      (Js.method in "contains" {what})))
+
   my-split (fn [separators text]
     (fold-right distinguish ["" {""}] text)
     distinguish (fn [letter done]
-      (if True
+      (if (elem? letter separators)
         [(& letter seps-in-order) (& "" words)]
         [seps-in-order (& (& letter first-word) rest-words)])
       {first-word ..rest-words} words
       [seps-in-order words] done))
 
-  separators ".,:;! "
+  separators (Set \\space \\, \\!)
 
   [seps words] (my-split separators "Hello, world!")
   """

  allBoundTypeVariables: ->
    substituteVarNames this, concatSets (for scope in @scopes
      scope.boundTypeVariables)...

  isClassDefined: (name) ->
    !!@_classNamed name

    scope.classes = newMap()
    scope.typeNames = newMap()
    scope.typeAliases = newMap()
    scope.deferredConstraints = []
    scope

  newLateScope: ->
