   else
     js
 
+allInjected = (required, injected) ->
+  for name, names of values required
+    injectedNames = lookupInMap injected, name
+    if not injectedNames or
+        names.size isnt injectedNames.size or
+        (intersectSets [names, injectedNames]).size isnt names.size
+      return no
+  yes
+
 subtractContexts = (ctx, what) ->
   definitions = subtractMaps ctx._scope(), what._scope()
   typeNames = subtractMaps ctx._scope().typeNames, what._scope().typeNames

      (map compileVariableAssignment, translationCache)
      varList varNames
      compiledCases])

ms.format = ms_format = (ctx, call) ->
  typeTable =


finalizeTypes = (ctx, ast) ->
  visitExpressions ast, (expression) ->
    if expression.label is 'name' and (type = ctx.finalType expression.symbol)
      expression.tea = type
    else if expression.tea
      expression.tea = substitute ctx.substitution, expression.tea
