let take t x =
      assert_positive "take" x;
      let new_level = C.(-) t.level x in
      if C.(<) new_level C.zero then
        `Unable
      else begin
        t.level <- new_level;
        `Taken
      end