diff options
Diffstat (limited to 'Hash.hs')
-rw-r--r-- | Hash.hs | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -0,0 +1,36 @@ +{-# LANGUAGE FlexibleInstances #-} + +module Hash where + +import Types + +import qualified Data.ByteString as B +import qualified Data.ByteString.Char8 as C8 +import qualified Crypto.Hash as H + +-- | Encode a hash pointer using base16 format. +encodeHashPointer :: HashPointer -> B.ByteString +encodeHashPointer (HashPointer d) = C8.pack (show d) + +class Hashable a where + hash :: a -> HashPointer + +instance Hashable B.ByteString where + hash = HashPointer . H.hash + +-- | Hash the concacenation of the hashes, encoding them in base16 format. +instance Hashable [HashPointer] where + hash = hash . B.concat . map encodeHashPointer + +instance Hashable a => Hashable (Activity a) where + hash (Activity a p s) = hash [hash a, p, hash s] + hash (StartActivity a s) = hash [hash a, hash s] + +instance Hashable Entered where + hash v = hash [hash (enteredData v), hash (echoData v)] + +instance Hashable Seen where + hash v = hash [hash (seenData v)] + +instance Hashable Signature where + hash (Signature s) = hash s |