Thanks for looking into this. Apparently I did not yet express my question properly.In short:Given a deeply nested data structure (e.g. Json with nested objects) I want to set a leaf value without considering which parent and or sibling nodes already exist.More concrete, given the following Json fragment (out of a configuration file):"disks": {"system": "/dev/xvda","ephemeral": "/dev/sdb","persistent": {"<disk identifier>" : { "path" : "/container/mounted/volume" }}},I want to add a persistent disk `my-disk` with a given path `/yet/another/volume` and I don't want to handle
- there is no node 'my-disk'
- there is no node 'persistent'
- there is no node 'disks'
Given a functiondefaultsToEmpty :: Maybe (Value) -> Maybe (Value)defaultsToEmpty Nothing = Just $ Object HashMap.emptydefaultsToEmpty m = mI can dojson & key "disks" %~ defaultsToEmpty& key "disks".key "persistent" %~ defaultsToEmpty& key "disks".key "persistent".key diskId %~ defaultsToEmptybut this doesn't look nice and was wondering if lenses can do better.David McBride <toad3k@gmail.com> schrieb am Di., 20. Dez. 2016 um 16:59 Uhr:Sorry, replying to list:
Would that not just be
json & key "outer" .~ object ["inner", "new-value"]______________________________On Tue, Dec 20, 2016 at 8:26 AM, Jan von Löwenstein <jan.loewenstein@gmail.com> wrote:I guess I haven't explained well what I am looking for.I want to set values deep inside a json structure, no matter if the full structure already exists.Go into "outer", if it doesn't exist make it an empty object.From there go into "inner" and set it to "new-value".The first part should be arbitrarily deep.BestJanBenjamin Edwards <edwards.benj@gmail.com> schrieb am Di., 20. Dez. 2016 um 13:42 Uhr:If the desired function doesn't inspect the input then why not just use const <<thing you want>> ?As to the lenses part: If you use a prism and it doesn't match, then it's a noop.On Tue, 20 Dec 2016 at 09:38 Jan von Löwenstein <jan.loewenstein@gmail.com> wrote:Hi,I want to have code that produces the following result no matter if input A or B was given:Result:{"outer" : {"inner" : "new-value"}}A:{"outer" : {"inner" : "old-value"}}B:{}`json & key "outer"._Object.key "inner" .~ "new-value"` didn't work.Is what I want even possible with lenses?BestJan_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post._________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.