If you haven't yet, you should check out FunctionalCollections.jl, which
"solves" this by not allowing assignment in this way, instead defining
`assoc` and `dissoc`.

Cheers,
   Kevin

On Wed, May 13, 2015 at 3:05 PM, Michael Francis <[email protected]>
wrote:

> On a mutable associative it is valid to execute the following ( where x is
> associative )
>
> x = Dict()
> y = x[:a] = 1.23
>
>
>
> y has the value 1.23
>
> on an immutable collection what does the following mean ?
>
> x = @NT( )
> y = x[:a] = 1.23
>
>
> Do I get a new version of x with the key :a and the value 1.23 ?
>
>
> On Wednesday, May 13, 2015 at 5:31:27 PM UTC-4, David Gold wrote:
>>
>> 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.
>>
>> Would you please elaborate on this? I'm not sure I understand (I'm
>> confident the issue is on my end).
>>
>> On Wednesday, May 13, 2015 at 3:03:11 PM UTC-4, Michael Francis wrote:
>>>
>>> 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")
>>>>>
>>>>>
>>>>>
>>>>>

Reply via email to