From 661e09daace3e611726d83f23e5ac02b2b561d5d Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 8 Aug 2019 13:55:06 +0100 Subject: [PATCH] feat: Add enum support --- yants.nix | 37 ++++++++++++++++++++++--------------- z-enums.png | Bin 0 -> 41305 bytes 2 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 z-enums.png diff --git a/yants.nix b/yants.nix index f80374066..3dfebfcf1 100644 --- a/yants.nix +++ b/yants.nix @@ -2,13 +2,10 @@ # polymorphic types as well as the ability to define & check records. # # All types (should) compose as expected. -# -# TODO(tazjin): enums? { toPretty ? ((import {}).lib.generators.toPretty {}) }: with builtins; let - # Internal utilities: typeError = type: val: throw "Expected type '${type}', but value '${toPretty val}' is of type '${typeOf val}'"; @@ -49,18 +46,30 @@ with builtins; let struct' = name: def: { inherit name def; check = value: - let - fieldMatch = foldl' (checkField def value) true (attrNames def); - noExtras = checkExtraneous name def (attrNames value); + let fieldMatch = foldl' (checkField def value) true (attrNames def); + noExtras = checkExtraneous name def (attrNames value); in (isAttrs value && fieldMatch && noExtras); - __functor = self: value: if self.check value - then value + __functor = self: value: if self.check value then value else (throw "Expected '${self.name}'-struct, but ${toPretty value} is of type ${typeOf value}"); }; struct = arg: if isString arg then (struct' arg) else (struct' "anonymous" arg); + + enum = name: values: rec { + inherit name values; + check = (x: elem x values); + __functor = self: x: if self.check x then x + else (throw "'${x}' is not a member of enum '${self.name}'"); + match = x: actions: let + actionKeys = map (__functor { inherit name check; }) (attrNames actions); + missing = foldl' (m: k: if (elem k actionKeys) then m else m ++ [ k ]) [] values; + in if (length missing) > 0 + then throw "Missing match action for members: ${toPretty missing}" + else actions."${__functor { inherit name check; } x}"; + }; + in (typeSet [ # Primitive types (typedef "any" (_: true)) @@ -79,12 +88,10 @@ in (typeSet [ else throw "Expected list element of type '${t.name}', but '${toPretty e}' is of type '${typeOf e}'" )) true v))) - (poly "attrs" (t: v: - isAttrs v && (foldl' (s: e: s && ( - if t.check e then true - else throw "Expected attribute set element of type '${t.name}', but '${toPretty e}' is of type '${typeOf e}'" - )) true (attrValues v)) - )) + (poly "attrs" (t: v: isAttrs v && (foldl' (s: e: s && ( + if t.check e then true + else throw "Expected attribute set element of type '${t.name}', but '${toPretty e}' is of type '${typeOf e}'" + )) true (attrValues v)))) (poly2 "either" (t1: t2: v: t1.check v || t2.check v)) -]) // { inherit struct; } +]) // { inherit struct enum; } diff --git a/z-enums.png b/z-enums.png new file mode 100644 index 0000000000000000000000000000000000000000..71673e7ab63cec4c293d878429e4122dd5ad3b93 GIT binary patch literal 41305 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®w-GU;LShP|g{cIP4)UBtM_1$BPma8w+T4 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 literal 0 HcmV?d00001