On Sunday, January 22, 2017, Soni L. <fakedme...@gmail.com> wrote: > > > On 22/01/17 10:03 PM, Wes Turner wrote: > > > > On Sunday, January 22, 2017, Wes Turner <wes.tur...@gmail.com > <javascript:_e(%7B%7D,'cvml','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# > persistent-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? > > > > >> >> 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/