On Sunday, January 22, 2017, Wes Turner <wes.tur...@gmail.com> wrote:
> > > On Sunday, January 22, 2017, Soni L. <fakedme...@gmail.com > <javascript:_e(%7B%7D,'cvml','fakedme%2...@gmail.com');>> wrote: > >> >> >> On 22/01/17 10:03 PM, Wes Turner wrote: >> >> >> >> On Sunday, January 22, 2017, Wes Turner <wes.tur...@gmail.com> wrote: >> >>> Have you looked at pyrsistent for >>> immutable/functional/persistent/copy-on-write >>> data structures in Python? >>> >>> https://github.com/tobgu/pyrsistent/ >>> >>> (freeze() / thaw()) >>> >>> ... e.g. List and Dict NamedTuple values are not immutable (because >>> append() and update() still work) >>> >> >> fn.py also has immutables: >> https://github.com/kachayev/fn.py/blob/master/README.rst#per >> sistent-data-structures >> >> >> You seem to be thinking of "immutable object builder". Not "the builder >> itself is immutable and operations on it create new builders". >> > > My mistake. > Something like @optionable and/or @curried from fn.py in conjunction with > PClass from pyrsistent may accomplish what you describe? > From http://pyrsistent.readthedocs.io/en/latest/api.html#pyrsistent.PClass.set : "Set a field in the instance. Returns a new instance with the updated value. The original instance remains unmodified. Accepts key-value pairs or single string representing the field name and a value." > >> >> >> >> >>> >>> On Sunday, January 22, 2017, Soni L. <fakedme...@gmail.com> wrote: >>> >>>> I've been thinking of an Immutable Builder pattern and an operator to >>>> go with it. Since the builder would be immutable, this wouldn't work: >>>> >>>> long_name = mkbuilder() >>>> long_name.seta(a) >>>> long_name.setb(b) >>>> y = long_name.build() >>>> >>>> Instead, you'd need something more like this: >>>> >>>> long_name = mkbuilder() >>>> long_name = long_name.seta(a) >>>> long_name = long_name.setb(b) >>>> y = long_name.build() >>>> >>>> Or we could add an operator to simplify it: >>>> >>>> long_name = mkbuilder() >>>> long_name .= seta(a) >>>> long_name .= setb(b) >>>> y = long_name.build() >>>> >>>> (Yes, I'm aware you can x = mkbuilder().seta(a).setb(b), then y = >>>> x.build(). But that doesn't work if you wanna "fork" the builder. Some >>>> builders, like a builder for network connections of some sort, would work >>>> best if they were immutable/forkable.) >>>> _______________________________________________ >>>> Python-ideas mailing list >>>> Python-ideas@python.org >>>> https://mail.python.org/mailman/listinfo/python-ideas >>>> Code of Conduct: http://python.org/psf/codeofconduct/ >>>> >>> >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/