A little bit of both, I have defined what I would consider common verbs, they happen to not exist in Base today. So either they get added to Base, which in this instance may be the right thing or at some point in the future they will conflict and breakage will ensue.
It also brings up an asymmetry between the overloaded [] operator for immutable collections, where y = x[:a] is valid but x' = x[:b] = 1.23 is not. I'm ok with this, but it does lead to some confusion. Most languages sidestep this by not having the ! annotation for mutation and rely on the type/number of arguments to define the behavior. I'm not necessarily advocating for this, but I would like some input from others on this. On Wednesday, May 13, 2015 at 2:51:47 PM UTC-4, Josh Langsfeld wrote: > > Is your concern that some other package might also export non-mutating > setindex and delete, thereby conflicting with yours? Or just that they > should exist in Base? > > On Wednesday, May 13, 2015 at 2:35:44 PM UTC-4, Michael Francis wrote: >> >> I added methods to NamedTuples.jl to support merge, set and delete. Since >> NamedTuples are essentially immutable dictionaries it seems incorrect to >> use the ! forms of setindex and delete. I now have an issue that these are >> not defined in base. How best to solve this? This is indirectly related to >> the thread on function name collapse, but any suggestions ? >> >> nt = @NT( a=>1, b=>2, c=>3 ) >> x = NamedTuples.setindex( nt, :x, 123 ) >> NamedTuples.delete( x, :a) # (b=>2,c=>3,x=>123) >> merge( nt, @NT( d => "hello", e => "world")) # ( >> a=>1,b=>2,c=>3,d=>"hello",e=>"world") >> >> >> >>
