From f2f0fbe5eb47e9e9d9aad2729a83b44a4b51652c Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 30 Dec 2018 23:30:57 -0400 Subject: Added library for handling identities for values in foreign data-stores. --- stdlib/source/lux/control/identity.lux | 53 ++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 stdlib/source/lux/control/identity.lux (limited to 'stdlib/source') diff --git a/stdlib/source/lux/control/identity.lux b/stdlib/source/lux/control/identity.lux new file mode 100644 index 000000000..da7445bc7 --- /dev/null +++ b/stdlib/source/lux/control/identity.lux @@ -0,0 +1,53 @@ +(.module: + [lux #* + [control + [equivalence (#+ Equivalence)] + [security + [capability (#+ Capability)]]] + [type + abstract]]) + +(abstract: #export (ID code entity storage) + {#.doc "A value that uniquely identifies an entity in some foreign data storage (such as a database)."} + + code + + (structure: #export (Equivalence Equivalence) + (All [code entity storage] + (-> (Equivalence code) + (Equivalence (ID code entity storage)))) + (def: (= reference sample) + (:: Equivalence = + (:representation reference) + (:representation sample)))) + + (type: #export (Can-Identify code storage) + (All [entity] + (Capability code + (ID code entity storage)))) + + (type: #export (Can-Anonymize code storage) + (All [entity] + (Capability (ID code entity storage) + code))) + + (type: #export (Service code storage) + [(Can-Identify code storage) + (Can-Anonymize code storage)]) + + (def: Service<_> + Service + [(|>> :abstraction) + (|>> :representation)]) + + (type: #export (Context code scope storage) + (-> (Service code storage) + (scope storage))) + + (def: #export (with-identity context) + (All [code scope] + (Ex [storage] + (-> (Context code scope storage) + (scope storage)))) + (context ..Service<_>)) + ) -- cgit v1.2.3