From bf71e5f4d875806e8f2623d95545c8b7a7c2d8f4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 11 Apr 2017 13:12:37 -0400 Subject: some basic data types and hashing to start debug-me This commit was sponsored by Denis Dzyubenko on Patreon. --- Hash.hs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Hash.hs (limited to 'Hash.hs') diff --git a/Hash.hs b/Hash.hs new file mode 100644 index 0000000..eca00e4 --- /dev/null +++ b/Hash.hs @@ -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 -- cgit v1.2.3