I see. In other words, BidirectionalGraph, etc. are "abstract views" and there is no way one would call a "BidirectionalGraph constructor" -- there's no such thing? For example, in the documentation, one might say that a problem requires a "BidirectionalGraph". This is short-hand for both the authors and the readers that the problem requires some data structure, types, etc.?
"View" isn't quite the right word - more like "contract" - but otherwise, that's a fairly accurate description :)
Andrew Sutton