Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

90 lines
2.3 KiB
Nix

{ core, ... } @ libs:
let
inherit(core) debug library list set type;
uid
= {
__functor
= self:
counter:
{
inherit counter;
keys = { };
values = [ ];
inserted = null;
};
insert
= { ... } @ self:
value:
let
self' = tryInsert self value;
in
if !self'.inserted
then
debug.panic [ "uid" "insert" ] "Cannot insert value to unique, because it is already there!"
else
self';
length#:
= { values, ... }:
list.length values;
tryInsert
= { counter, keys, values, ... } @ self:
value:
let
key = string value;
in
if keys.${key} or null == null
then
{
counter = counter + 1;
keys = keys // { ${key} = value; };
values = values ++ [ value ];
inserted = true;
}
else
self
// {
inserted = false;
};
};
preparePerson
= identifier:
value:
value
// {
__functor
= self:
{ surname, ... }:
"##${surname}##";
};
preparePeople
= people:
type.matchPrimitiveOrPanic people
{
lambda
= preparePeople
(
people
(
libs
// {
Person
= name:
{
inherit name;
};
}
)
);
path = preparePeople ( library.import people );
set = set.map preparePerson people;
};
in
{
initEvaluationState = uid 0;
}