digraph G {
node [fontname = courier, shape = box]
subgraph cluster1 {
label = "Given,"
{rank = same;
anon0 [style = invis]
anon1 [style = invis]
anon0 -> anon1 [label = "⊇\n:"]
}
{rank = same;
"'static" [style = filled]
"'static" -> "'b"
"'b" -> "'a"
}
}
subgraph cluster2 {
label = "we have:"
{rank = same;
anon2 [style = invis]
anon3 [style = invis]
anon2 -> anon3 [label = "subtypes\n:"]
}
f [label = "for<'any> fn(&'any ())\nfn(&'_ ())\nfn(&())", style = filled]
{rank = same;
fs [label = "fn(&'static ())", style = filled]
fb [label = "fn(&'b ())"]
fa [label = "fn(&'a ())"]
}
{rank = same;
s [label = "&'static ()", style = filled]
b [label = "&'b ()"]
a [label = "&'a ()"]
}
fb -> fs [label = "per contrav."]
fa -> fb [label = "per contrav."]
s -> b [label = "per cov."]
b -> a [label = "per cov."]
f -> fa
f -> fb
f -> fs [label = "per\n\"For all\" ⇒ \"for this one\""]
}
"'a" -> f [style = invis]
}