So FWIW, I think the interface I'd like to use is one where there's nothing
special about 0 values. You can put them in and they'll stay there, and if
(+) results in an element with value 0, that stays there too. But if you
ask for the value of something which doesn't have an explicit value, you'll
get 0 instead of Any.
This seems like a valuable thing to have, even if it's not the interface of
Bag itself. (I agree that there's something strange about a Bag containing
no items yet not being empty.)
That said, in this specific case a Hash or EnumMap should be pretty okay,
except that I want non-stringy keys. I've finally discovered object hashes,
so I think I'll be able to make those work.
(In case anyone stumbles upon this while trying to get non-stringy keys:
the syntax :{} constructs a hash whose keys can be arbitrary objects, not
just strings. So :{ 1=2 }1 returns Any, because the hash contains the
number 1, not the string 1. At least that's my current understanding.)
On Sun, Mar 1, 2015 at 9:01 AM, Elizabeth Mattijsen l...@dijkmat.nl wrote:
On 01 Mar 2015, at 02:01, Darren Duncan dar...@darrenduncan.net wrote:
On 2015-02-28 3:27 PM, Elizabeth Mattijsen wrote:
An interesting thought for the non-mutable cases of Set, Bag and Mix.
For the mutable cases (SetHash, BagHash, MixHash), setting the element
to 0, is effectively deleting it.
For the non-mutable case, I guess we could argue that *if* you
specified it, it should exist as such.
Will ponder about this…
If you're going to support that alternative, it should still be easy for
one to get the behavior where the non-mutable cases don't contain elements
with a count of zero. Zeros can easily arise when doing operations like
set difference or intersection etc, and we would want consistency between
values that arise that way versus ones explicitly selected with a literal.
-- Darren Duncan
The pondering has been cleared up by TimToady:
http://irclog.perlgeek.de/perl6/2015-03-01#i_10199408
so (a=0).Bag will continue to yield ().Bag.
Liz