style: Switch to nixfmt from nixpkgs-fmt
Most of the ecosystem has moved to this formatter, and many people configured their editors to autoformat it with this formatter. Closes: https://git.snix.dev/snix/snix/issues/62 Change-Id: Icf39e7836c91fc2ae49fbe22a40a639105bfb0bd Reviewed-on: https://cl.snix.dev/c/snix/+/30671 Reviewed-by: Florian Klink <flokli@flokli.de> Tested-by: besadii Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
This commit is contained in:
parent
3443e6bd08
commit
91d02d8c84
136 changed files with 39952 additions and 11007 deletions
|
|
@ -3,28 +3,33 @@ let
|
|||
# Takes a tag, checks whether it is an attrset with one element,
|
||||
# if so sets `isTag` to `true` and sets the name and value.
|
||||
# If not, sets `isTag` to `false` and sets `errmsg`.
|
||||
verifyTag = tag:
|
||||
verifyTag =
|
||||
tag:
|
||||
let
|
||||
cases = builtins.attrNames tag;
|
||||
len = builtins.length cases;
|
||||
in
|
||||
if builtins.length cases == 1
|
||||
then
|
||||
let name = builtins.head cases; in {
|
||||
if builtins.length cases == 1 then
|
||||
let
|
||||
name = builtins.head cases;
|
||||
in
|
||||
{
|
||||
isTag = true;
|
||||
name = name;
|
||||
val = tag.${name};
|
||||
errmsg = null;
|
||||
}
|
||||
else {
|
||||
isTag = false;
|
||||
errmsg =
|
||||
("match: an instance of a sum is an attrset "
|
||||
else
|
||||
{
|
||||
isTag = false;
|
||||
errmsg = (
|
||||
"match: an instance of a sum is an attrset "
|
||||
+ "with exactly one element, yours had ${toString len}"
|
||||
+ ", namely: ${lib.generators.toPretty {} cases}");
|
||||
name = null;
|
||||
val = null;
|
||||
};
|
||||
+ ", namely: ${lib.generators.toPretty { } cases}"
|
||||
);
|
||||
name = null;
|
||||
val = null;
|
||||
};
|
||||
|
||||
# Returns the tag name of a given tag attribute set.
|
||||
# Throws if the tag is invalid.
|
||||
|
|
@ -39,11 +44,15 @@ let
|
|||
tagValue = tag: (assertIsTag tag).val;
|
||||
|
||||
# like `verifyTag`, but throws the error message if it is not a tag.
|
||||
assertIsTag = tag:
|
||||
let res = verifyTag tag; in
|
||||
assertIsTag =
|
||||
tag:
|
||||
let
|
||||
res = verifyTag tag;
|
||||
in
|
||||
assert res.isTag || throw res.errmsg;
|
||||
{ inherit (res) name val; };
|
||||
|
||||
{
|
||||
inherit (res) name val;
|
||||
};
|
||||
|
||||
# Discriminator for values.
|
||||
# Goes through a list of tagged predicates `{ <tag> = <pred>; }`
|
||||
|
|
@ -64,22 +73,22 @@ let
|
|||
# { negative = i: i < 0; }
|
||||
# ] 1
|
||||
# => { smol = 1; }
|
||||
discrDef = defTag: fs: v:
|
||||
discrDef =
|
||||
defTag: fs: v:
|
||||
let
|
||||
res = lib.findFirst
|
||||
(t: t.val v)
|
||||
null
|
||||
(map assertIsTag fs);
|
||||
res = lib.findFirst (t: t.val v) null (map assertIsTag fs);
|
||||
in
|
||||
if res == null
|
||||
then { ${defTag} = v; }
|
||||
else { ${res.name} = v; };
|
||||
if res == null then { ${defTag} = v; } else { ${res.name} = v; };
|
||||
|
||||
# Like `discrDef`, but fail if there is no match.
|
||||
discr = fs: v:
|
||||
let res = discrDef null fs v; in
|
||||
assert lib.assertMsg (res != { })
|
||||
"tag.discr: No predicate found that matches ${lib.generators.toPretty {} v}";
|
||||
discr =
|
||||
fs: v:
|
||||
let
|
||||
res = discrDef null fs v;
|
||||
in
|
||||
assert lib.assertMsg (
|
||||
res != { }
|
||||
) "tag.discr: No predicate found that matches ${lib.generators.toPretty { } v}";
|
||||
res;
|
||||
|
||||
# The canonical pattern matching primitive.
|
||||
|
|
@ -104,20 +113,27 @@ let
|
|||
# match success matcher == 43
|
||||
# && match failure matcher == 0;
|
||||
#
|
||||
match = sum: matcher:
|
||||
let cases = builtins.attrNames sum;
|
||||
in assert
|
||||
let len = builtins.length cases; in
|
||||
lib.assertMsg (len == 1)
|
||||
("match: an instance of a sum is an attrset "
|
||||
match =
|
||||
sum: matcher:
|
||||
let
|
||||
cases = builtins.attrNames sum;
|
||||
in
|
||||
assert
|
||||
let
|
||||
len = builtins.length cases;
|
||||
in
|
||||
lib.assertMsg (len == 1) (
|
||||
"match: an instance of a sum is an attrset "
|
||||
+ "with exactly one element, yours had ${toString len}"
|
||||
+ ", namely: ${lib.generators.toPretty {} cases}");
|
||||
let case = builtins.head cases;
|
||||
in assert
|
||||
lib.assertMsg (matcher ? ${case})
|
||||
("match: \"${case}\" is not a valid case of this sum, "
|
||||
+ "the matcher accepts: ${lib.generators.toPretty {}
|
||||
(builtins.attrNames matcher)}");
|
||||
+ ", namely: ${lib.generators.toPretty { } cases}"
|
||||
);
|
||||
let
|
||||
case = builtins.head cases;
|
||||
in
|
||||
assert lib.assertMsg (matcher ? ${case}) (
|
||||
"match: \"${case}\" is not a valid case of this sum, "
|
||||
+ "the matcher accepts: ${lib.generators.toPretty { } (builtins.attrNames matcher)}"
|
||||
);
|
||||
matcher.${case} sum.${case};
|
||||
|
||||
# A `match` with the arguments flipped.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue