function(CompositeHandler)
  map_new()
  ans(handlers)
  this_set(handlers ${handlers})


  this_declarecalloperation(op)
  function(${op})
    this_get(handlers)
    map_keys(${handlers})
    ans(handlers)
    foreach(handler ${handlers})
      call("${handler}"(${ARGN}))
      ans(res)
      list(LENGTH res not_null)
      if(not_null)
        return_ref(res)
      endif()
    endforeach()
    return()
  endfunction()

  proto_declarefunction(add)
  function(${add} handler)
    this_get(handlers)
    map_tryget("${handlers}" "${handler}")
    ans(hasHandler)
    if(hasHandler)
      return(false)
    endif()  
    map_set(${handlers} "${handler}" "${handler}")
    return(true)
  endfunction()


  proto_declarefunction(remove)
  function(${remove} handler)
    this_get(handlers)
    map_tryget(${handlers} "${handler}")
    ans(hasHandler)
    if(hasHandler)
      return(false)
    endif()
    map_set(${handlers} "${handler}" "") 
  endfunction()
endfunction()