sdrangel: fix build on x86_64-darwin
[NixPkgs.git] / pkgs / stdenv / generic / meta-types.nix
blobddbd1daca696ea6d7cbcdb5b523501beb64a1a19
1 { lib }:
2 # Simple internal type checks for meta.
3 # This file is not a stable interface and may be changed arbitrarily.
5 # TODO: add a method to the module system types
6 #       see https://github.com/NixOS/nixpkgs/pull/273935#issuecomment-1854173100
7 let
8   inherit (builtins) isString isInt isAttrs isList all any attrValues isFunction isBool concatStringsSep isFloat;
9   isTypeDef = t: isAttrs t && t ? name && isString t.name && t ? verify && isFunction t.verify;
12 lib.fix (self: {
13   string = {
14     name = "string";
15     verify = isString;
16   };
17   str = self.string;  # Type alias
19   any = {
20     name = "any";
21     verify = _: true;
22   };
24   int = {
25     name = "int";
26     verify = isInt;
27   };
29   float = {
30     name = "float";
31     verify = isFloat;
32   };
34   bool = {
35     name = "bool";
36     verify = isBool;
37   };
39   attrs = {
40     name = "attrs";
41     verify = isAttrs;
42   };
44   list = {
45     name = "list";
46     verify = isList;
47   };
49   attrsOf = t: assert isTypeDef t; let
50     inherit (t) verify;
51   in {
52     name = "attrsOf<${t.name}>";
53     verify =
54       # attrsOf<any> can be optimised to just isAttrs
55       if t == self.any then isAttrs
56       else attrs: isAttrs attrs && all verify (attrValues attrs);
57   };
59   listOf = t: assert isTypeDef t; let
60     inherit (t) verify;
61   in {
62     name = "listOf<${t.name}>";
63     verify =
64       # listOf<any> can be optimised to just isList
65       if t == self.any then isList
66       else v: isList v && all verify v;
67   };
69   union = types: assert all isTypeDef types; let
70     # Store a list of functions so we don't have to pay the cost of attrset lookups at runtime.
71     funcs = map (t: t.verify) types;
72   in {
73     name = "union<${concatStringsSep "," (map (t: t.name) types)}>";
74     verify = v: any (func: func v) funcs;
75   };