(* all arguments are unique/linear *) Drop = #[lang = Drop] iface ^{ drop = Λ (_: ^This) → (); } default .{ drop = λ (x: ^This) → { std.typarts.foreach ^This.parts (λ (t: Type) → λ (v: t) → (Drop t).drop v); () }; }; Clone = #[lang = Clone] iface ^{ inherit Drop; clone = Λ (self: &^This) → ^This; } default .{ clone = λ (self: &^This) → { std.typarts.map ^This.parts (λ (t: Type) → λ (x: t) → (Clone t).clone v); () }; }; main = λ { std.println "Hello World!"; };