Ty vycházíš z předpokladu, že API a implementace jsou od sebe rozdílné.
To není předpoklad, to je definice API.
Obávám se, že to není nijak podstatné.
Byly časy, kdy API funkce (říkejme tomu spíše signatura) vypadala nějak takto:
function substr(String str, Int start, Int len) : StringA v praxi jsme pak museli ošetřit testem, co se stane, když zavoláme
substr("abc", 6, -2). Někde uvnitř té funkce bylo definováno, že to má vyhodit výjimku, prázdný řetězec, nebo něco takového. Podstatné ale je, že signatura funkce o této nesmyslnosti nic nevěděla.
Dnes už máme typy na takové úrovni, že dokážeme zohlednit, že
substr("abc", 6, -2) nepůjde vůbec přeložit. A myslím, že nikoho nijak zvlášť nezajímá, že kdysi dávno se tvrdilo, že ošetření těchto nesmyslných vstupů je otázka implementace, a nikoliv API/Signatury.
Takže pokud trváš na tom, že API/Signatura a implemnetace/chování jsou dva oddělené světy, tak já ti tvůj názor přeji, ale v takovém případě nám nejde o stejnou věc.