[Nix-dev] concatAttrs :: [attrSet] -> attrSet ?

Daniel Peebles pumpkingod at gmail.com
Tue May 30 15:58:10 CEST 2017


My favorite interface for this type of operation is from Haskell's
Data.Map, in pseudo-Haskell notation:

unionWithKey : (String -> a -> a -> a) -> Attrs a -> Atrs a -> Attrs a

unionWith : (a -> a -> a) -> Attrs a -> Attrs a -> Attrs a
unionWith = f: unionWithKey (_: f)

This should be sufficient to write most other "merge" operations. The
semantics are that keys common to both attrsets get their values passed
into the function to figure out how it should be merged, and otherwise keys
get passed through to the output attrsets unchanged.

Then you can pick whether you want left-biased or right-biased behavior by
simply passing in a function that selects the left or right element, or
possibly merges them in more interesting ways (for example calling this
function recursively)

There are obvious analogs for intersections too.



On Mon, May 29, 2017 at 11:19 AM, Sergiu Ivanov <sivanov at colimite.fr> wrote:

> Hello Tomasz, Domen, and Volth,
>
> Thus quoth  Tomasz Czyż  at 13:26 on Mon, May 29 2017:
> >
> > https://github.com/NixOS/nixpkgs/blob/master/lib/attrsets.nix#L413 is
> also
> > handy
> >
> > 2017-05-29 13:36 GMT+01:00 Domen Kožar <domen at dev.si>:
> >
> >> mkMerge can be used only with NixOS modules.
> >>
> >> I do remember some recursive merge function, but can't find it now.
> >>
> >> On Mon, May 29, 2017 at 2:29 PM, Volth <volth at volth.com> wrote:
> >>
> >>> there is also lib.mkMerge to handle nested attrs
>
> My use case is waay simpler than modules (lucky me) :-)
>
> recursiveUpdate and especially recursiveUpdateUntil are some interesting
> beasts, thanks for the reference.
>
> --
> Sergiu
>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> https://mailman.science.uu.nl/mailman/listinfo/nix-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.science.uu.nl/pipermail/nix-dev/attachments/20170530/b4e0c55e/attachment.html>


More information about the nix-dev mailing list