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