Okay, how would you try to implement a graph (DAG to be specific, no cycles, ever) of generic nodes whose generic type may change along the chain of nodes? Like, say you have 3 types of Nodes: Source (Start point of the graph) Node, "intermediate" Nodes and Consumer (End point of the graph) Nodes. The problem is that you in terms of generic types, you run into this: SourceNode[A] --> IntermediateNodeKind1[A, B] --> IntermediateNodeKind2[B, B] --> IntermediateNodeKind3 [B, C] --> IntermediateNodeKind4 [C, D] --> ConsumerNode [D] IntermediateNode-types may transform the type from one to the next or they may leave it intact (think in terms of functional programming that "map" changes the generic type, "filter" doesn't).