fake.modules transposition for aspect-oriented Dendritic Nix. with cross-aspect dependencies. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/ dendrix.oeiuwq.com/Dendritic.html
dendritic nix aspect oriented
at main 53 lines 1.2 kB view raw
1{ 2 mkFlake, 3 evalMod, 4 lib, 5 ... 6}: 7{ 8 9 flake.tests."test override default provider" = 10 let 11 flake = mkFlake { 12 flake.aspects = 13 { aspects, ... }: 14 { 15 aspectOne = 16 { aspect, ... }: 17 { 18 includes = [ (aspects.aspectTwo { message = "hello ${aspect.name}"; }) ]; 19 classOne = { }; # required for propagation 20 }; 21 22 aspectTwo.__functor = 23 _: 24 { message }: # args must be always named 25 { class, aspect-chain }: 26 { aspect, ... }: 27 { 28 classOne.bar = [ 29 "foo" 30 aspect.name 31 message 32 class 33 ] 34 ++ (lib.map (x: x.name) aspect-chain); 35 }; 36 aspectTwo.classOne.bar = [ "itself not included" ]; 37 }; 38 }; 39 40 expr = (evalMod "classOne" flake.modules.classOne.aspectOne).bar; 41 expected = [ 42 "foo" 43 "<function body>" 44 "hello aspectOne" 45 "classOne" 46 "aspectOne" 47 ]; 48 in 49 { 50 inherit expr expected; 51 }; 52 53}