Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- class ContentAddressable a where
- contentHash :: a -> Hash
Documentation
class ContentAddressable a where Source #
A type class that is inhabited by types that can compute a hash of their content.
The base instances of this class should only live in dedicated "hashing packages" such as unison-hashing-v2
, whose
types and implementations should never change.
Trivial wrapper instances can be written around these, but note these pipelines from
MyType ==> SomeHashingType ==> Hash
must take care not to change the MyType ==> SomeHashingType
conversion, once
written.
For example, we might have a representation of some namespace in memory
data Namespace = Namespace Terms Types OtherStuff CachesAndWhatnot
with a somewhat equivalent "hashing" type in some "hashing package", with a ContentAddressable instance
data HashingNamespace = Namespace Terms Types
We can of course make our own convenience instance
instance ContentAddressable Namespace where contentHash = contentHash . namespaceToHashingNamespace
But we must make sure that the implementation of namespaceToHashingNamespace
never changes the fields in the
corresponding HashingNamespace
, even as features are added to or removed from Namespace
.
contentHash :: a -> Hash Source #