digraph "Crany"
{
    edge [dir=back,arrowtail=empty]

    "ModelSelf<Model<Self>>" -> "Concept<ModelSelf<Model<Self>>>" [label="self()"]
    "Concept<ModelSelf<Model<Self>>>" -> "Model" [label="static relays"]

    "ConceptSelf" -> "Concept<ConceptSelf>" [label="recursive self()"]
    "Concept<ConceptSelf>" -> "CloneConcept" [label="dynamic definitions"]

    "CranySelf<Crany<Concept>>" -> "Concept<CranySelf<Crany<Concept>>>" [label="self()"]
    "Concept<CranySelf<Crany<Concept>>>" -> "Crany<Concept>" [label="static relays"]

    "CloneConcept" -> "ModelSelf<Model<Self>>" [label="clone()" constraint=false]

    "Crany<Concept>" -> "CloneConcept"  [label="self_" arrowtail=diamond constraint=false]

    "Model" -> "Self" [label="self_" arrowtail=diamond]
}
