let unbind f obj =
    let handlers =
      try
        Obj.obj (obj >>> get handlers_field >>> as_block)
      with Failure "as_block" ->
        ref []
    in
      handlers := List.filter ((!=) f) !handlers ;
      if !handlers = [] then (
        obj >>> set handlers_field (inject Nil) ;
        obj >>> set name (inject Nil)
      )