contract Parent {
	function foo() internal pure virtual returns (string memory) {
		return "foo";
	}

	// error! private functions cannot be overriden, so no point in making them virtual!
	function bar() private pure virtual returns (string memory) {
		return "bar";
	}
}