Případně ještě se zeptám obecně: Jaké jsou v Haskellu a Idrisu pravidla ohledně koherence? Dejme tomu, že ve svém programu používám knihovny libA a libB, knihovna libA definuje typeclass Tc a libB typ Foo. Můžu instanciovat Tc pro Foo?
Na toto jsem nedostal odpověď, tak jsem se
zeptal na SO. TL;DR Haskell dovoluje orphan type instances vč. odvozených z dependencí. (Je Idris v tomto jiný? Asi bych to nečekal.)
@BoneFlute toto je příklad, kdy Rust musí omezovat typové abstrakce kvůli engineering constraints - nemůže dovolit orphan trait implementace na úrovni knihoven (na úrovni modulů ano), protože by to jednak způsobovalo semver hazardy a také pravděpodobně problémy s linkováním (zejména dynamickým), nejspíš by implementace traitů už nemohly být anonymní...
Zajímavé je, že Haskellu tohle nevadí, efektivně přidání jakékoli zvenku viditelné instance v knihovně je semver-incompatible změna...