From cf2654b2e0dedd31c6ec14458953c85530db8cec Mon Sep 17 00:00:00 2001 From: Eric Sagnes Date: Mon, 7 Nov 2016 08:34:06 +0900 Subject: either type: improve merge function --- lib/types.nix | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/types.nix') diff --git a/lib/types.nix b/lib/types.nix index 26523f59f25..9366d394da7 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -333,7 +333,15 @@ rec { name = "either"; description = "${t1.description} or ${t2.description}"; check = x: t1.check x || t2.check x; - merge = mergeOneOption; + merge = loc: defs: + let + defList = map (d: d.value) defs; + in + if all (x: t1.check x) defList + then t1.merge loc defs + else if all (x: t2.check x) defList + then t2.merge loc defs + else mergeOneOption loc defs; typeMerge = f': let mt1 = t1.typeMerge (elemAt f'.wrapped 0).functor; mt2 = t2.typeMerge (elemAt f'.wrapped 1).functor; -- cgit 1.4.1