[Haskell-cafe] Do something about Cabal?

Joachim Durchholz jo at durchholz.org
Sat Dec 12 14:22:03 UTC 2020


> The hash is obviously calculated on a normalised version of the module.
> 
> As part of this normalisation step, all references to external 
> definitions are fully qualified.
> 
> And it is impossible to import a variable with a changed type, 
> becauseĀ if the type had changed so would have its definition and 
> therefore the hash of the imported module.

The normalization is actually the important point here.
It's easy to come up with something that works reasonably, for some 
definition of "reasonably".

Normalization can be too narrow (throw away relevant information) or too 
wide (leave in irrelevant information).
Problem is, it's the library user that defines what parts of a library 
are of interest to the use case.
Or, more specifically: What parts of a library's *semantics*.

Most users care only about specific properties of the library functions 
they use.
E.g. for a function that returns a list, some care about order and some 
don't.
Some stuff may not even be properly expressible, like side-channel data 
leakage in a crypto hash function, or legal constraints you don't want 
to care about but have to.
More on the programming sides, type bounds may become tighter or less 
tight. And even a less tight type bound can cause trouble (because your 
code might have to deal with less tight type bounds on results, for 
example - or you might be in a situation where you want to allow your 
own callers to pass in looser-constrained data - or maybe you do not 
want that because your own code depends on these bounds). And sometimes 
the type bounds need to be explicit because type inference isn't good 
enough, so you can't fully leave that to automation.

So... hashes are good for checking for equality, but you want to express 
inequalities, otherwise your clients will have to recheck the full API 
with every upgrade.
(Sure, with Haskell, this is much less of a problem than usual. But it 
won't go away.)


More information about the Haskell-Cafe mailing list