Ale ono ji nic nepopírá. Jenom je irelevantní. Haskellový kód by měl být interpretován podle principů "denotational semantics". Viz. https://en.wikibooks.org/wiki/Haskell/Denotational_semantics. Ta věta výše popisuje operational semantics, což je vzhledem k sémantice kódu irelevantní. Prostě ten tvůj kód podle denotational semantics netestuje dělitelnost nulou, jenom to tak podle operational semantics většinou vyjde.
No a? Já říkám od začátku, že je to prasárna, ale není to undefined behavior. Haskell zaručuje, že ten program dává deterministické výsledky, protože chování error je jasně specifikované.
Chování error je isomorfní s chováním undefined, viz ta definice undefined výše. Takže to je undefined.... No a v případě haskellových programů se o "behaviour" moc nebavíme, protože "behaviour" je typické pro operational semantics, nikoliv pro denotational semantics, tam žádné není...
Vzhledem k tomu, že sis ten text nepřečetl, tak ti to shrnu: haskellové programy se interpretují jako matematická rovnice. To, co jsi napsal, není vyjádřením testu na to, zda lze dělit to číslo nulou. Je to nedefinované, protože bottom je synonymomum pro nedefinovanou hodnotu a z toho nemůžeš nic odvodit. Nicméně, překladač haskellu pracuje deterministicky, dokonce jsi použil jenom instrukce popsané ve specifikaci, a následně z tvého nedefinovaného výsledku deterministicky vygeneruje kód, který "shodou okolností" vrací korektní výsledky.
Ovšem nemůžeš se pak divit, že při nějaké změně sémantiky (strikt -> lazy), která nemá na korektně napsané programy vliv, přestane ten tvůj chybný kód fungovat.