> protected function getDescription(): ?string { return 'Fetching data from a DB introduces a few typing challenges. '. 'First, the data comes back untyped. Second, a row in a DB generally '. 'contains columns of different types.'; } protected function getFilenames(): Vector { return Vector { 'FakeDB.php', }; } protected function getDocs(): Vector<(string, string)> { return Vector{ tuple ('Hack Shapes', 'hack.shapes'), tuple ('Mixed Types', 'hack.annotations.mixedtypes'), }; } public function getDemoFilename(): string { return 'demo.php'; } public function getDemoResult(): string { return db_result_main(); } public function getDemoXHP(): ?:xhp { return null; } }