This whole thing might be more explicit/easier to follow if the example nodes were `IdentityInterface` or `Function` nodes where the input and output names are part of the interface declaration.