       addToMap concated, k, v
   concated
 
+concatConcatMaps = (maps) ->
+  concated = newMap()
+  for map in maps
+    for k, v of map.values
+      if list = lookupInMap concated, k
+        list.push v
+      else
+        addToMap concated, k, [v]
+  concated
+
 subtractSets =
 subtractMaps = (from, what) ->
   subtracted = newMap()

    @scopes[@scopes.length - 1]

  newScope: ->
    scope = newMap()
    scope.deferred = []
    @scopes.push scope

  closeScope: ->
    @scopes.pop()

  declaration: (name) ->
    @_declarationInScope @scopes.length - 1, name

  operator = _operator call
  args = _arguments call

  compiledOperator = operatorCompile ctx, call

  compiledArgs = termsCompile ctx, args

  callTyping ctx, call

  assignCompile ctx, call, "#{compiledOperator}(#{listOf compiledArgs})"

labeledToMap = (pairs) ->
  labelNaming = ([label, value]) -> [(_labelName label), value]
