diff --git a/docs/design/generics/details.md b/docs/design/generics/details.md index 5ba37f3a3fc6..cb33bb158e0b 100644 --- a/docs/design/generics/details.md +++ b/docs/design/generics/details.md @@ -1283,62 +1283,62 @@ though could be defined in the `impl` block of `IncidenceGraph`, - `IncidenceGraph` implements all methods of `Graph`, `EdgeListGraph` implements none of them. -``` -class MyEdgeListIncidenceGraph { - impl as IncidenceGraph { - fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn OutEdges[addr me: Self*](u: VertexDescriptor) - -> (EdgeIterator, EdgeIterator) { ... } - } - impl as EdgeListGraph { - fn Edges[addr me: Self*]() -> (EdgeIterator, EdgeIterator) { ... } - } -} -``` + ``` + class MyEdgeListIncidenceGraph { + impl as IncidenceGraph { + fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn OutEdges[addr me: Self*](u: VertexDescriptor) + -> (EdgeIterator, EdgeIterator) { ... } + } + impl as EdgeListGraph { + fn Edges[addr me: Self*]() -> (EdgeIterator, EdgeIterator) { ... } + } + } + ``` - `IncidenceGraph` and `EdgeListGraph` implement all methods of `Graph` between them, but with no overlap. -``` -class MyEdgeListIncidenceGraph { - impl as IncidenceGraph { - fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn OutEdges[addr me: Self*](u: VertexDescriptor) - -> (EdgeIterator, EdgeIterator) { ... } - } - impl as EdgeListGraph { - fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn Edges[addr me: Self*]() -> (EdgeIterator, EdgeIterator) { ... } - } -} -``` + ``` + class MyEdgeListIncidenceGraph { + impl as IncidenceGraph { + fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn OutEdges[addr me: Self*](u: VertexDescriptor) + -> (EdgeIterator, EdgeIterator) { ... } + } + impl as EdgeListGraph { + fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn Edges[addr me: Self*]() -> (EdgeIterator, EdgeIterator) { ... } + } + } + ``` - Explicitly implementing `Graph`. -``` -class MyEdgeListIncidenceGraph { - impl as Graph { - fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - } - impl as IncidenceGraph { ... } - impl as EdgeListGraph { ... } -} -``` + ``` + class MyEdgeListIncidenceGraph { + impl as Graph { + fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + } + impl as IncidenceGraph { ... } + impl as EdgeListGraph { ... } + } + ``` - Implementing `Graph` externally. -``` -class MyEdgeListIncidenceGraph { - impl as IncidenceGraph { ... } - impl as EdgeListGraph { ... } -} -external impl as Graph { - fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } - fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } -} -``` + ``` + class MyEdgeListIncidenceGraph { + impl as IncidenceGraph { ... } + impl as EdgeListGraph { ... } + } + external impl as Graph { + fn Source[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + fn Target[me: Self](e: EdgeDescriptor) -> VertexDescriptor { ... } + } + ``` This last point means that there are situations where we can only detect a missing method definition by the end of the file. This doesn't delay other