*afaik* (++) does not even work with OverloadedStrings with Text or ByteString.
Lets allow ourselves to switch from [] & Strings in Haskell in any part of the code.
`brittany` was used.
Then all changes passed through manual supervision.
Then handcrafted code cleanup was done.
All changes are pure lambda code refactoring,
there should be no changes to the functionality.
- Define MD5, SHA1 and SHA256 algos
- Design typclass to handle type-specific hashing behavior
- hash digest generation
- printing to base32
- Differentiate between parts meant to be used outside (by hnix-store-*, hnix)
and parts meant to be used only internaly (in **.Internal.** modules)
- Observe that hashing "Hello World" @SHA1 and serializing to base32 gives
the same hash as the one in the thesis example
"s23c9fs0v32pf6bhmcph5rbqsyl5ak8a"
The test suite fails when run naively, due to the use of haskell code that
uses gc statistics, and requires `+RTS -T` flags be passed to the testsuite.
We opt in to this flag for CI and for any default.nix that packages
hnix-store-core.