aip-0.1.0: src/Data/Aviation/Aip/SHA1.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DefaultSignatures #-}
module Data.Aviation.Aip.SHA1(
SHA1(..)
, AsSHA1(..)
, FoldSHA1(..)
, GetSHA1(..)
, SetSHA1(..)
, ManySHA1(..)
, HasSHA1(..)
, IsSHA1(..)
, hash
, hashHex
, showsHash
, showHash
) where
import Control.Category((.), id)
import Control.Applicative(pure)
import Control.Lens
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON))
import Data.Digest.SHA1(Word160(Word160))
import qualified Data.Digest.SHA1 as SHA1(hash, toInteger)
import Data.Eq(Eq)
import Data.Functor((<$>))
import Data.String(String)
import Data.Word(Word8)
import Numeric(showHex)
import Prelude(Show, ShowS)
newtype SHA1 =
SHA1
Word160
deriving (Eq, Show)
instance FromJSON SHA1 where
parseJSON v =
(\(b0, b1, b2, b3, b4) -> SHA1 (Word160 b0 b1 b2 b3 b4)) <$> parseJSON v
instance ToJSON SHA1 where
toJSON (SHA1 (Word160 b0 b1 b2 b3 b4)) =
toJSON (b0, b1, b2, b3, b4)
class ManySHA1 a => AsSHA1 a where
_SHA1 ::
Prism' a SHA1
default _SHA1 ::
IsSHA1 a =>
Prism' a SHA1
_SHA1 =
_IsSHA1
instance AsSHA1 SHA1 where
_SHA1 =
id
class FoldSHA1 a where
_FoldSHA1 ::
Fold a SHA1
instance FoldSHA1 SHA1 where
_FoldSHA1 =
id
class FoldSHA1 a => GetSHA1 a where
_GetSHA1 ::
Getter a SHA1
default _GetSHA1 ::
HasSHA1 a =>
Getter a SHA1
_GetSHA1 =
sha1
instance GetSHA1 SHA1 where
_GetSHA1 =
id
class SetSHA1 a where
_SetSHA1 ::
Setter' a SHA1
default _SetSHA1 ::
ManySHA1 a =>
Setter' a SHA1
_SetSHA1 =
_ManySHA1
instance SetSHA1 SHA1 where
_SetSHA1 =
id
class (FoldSHA1 a, SetSHA1 a) => ManySHA1 a where
_ManySHA1 ::
Traversal' a SHA1
instance ManySHA1 SHA1 where
_ManySHA1 =
id
class (GetSHA1 a, ManySHA1 a) => HasSHA1 a where
sha1 ::
Lens' a SHA1
default sha1 ::
IsSHA1 a =>
Lens' a SHA1
sha1 =
_IsSHA1
instance HasSHA1 SHA1 where
sha1 =
id
class (HasSHA1 a, AsSHA1 a) => IsSHA1 a where
_IsSHA1 ::
Iso' a SHA1
instance IsSHA1 SHA1 where
_IsSHA1 =
id
instance SetSHA1 () where
instance FoldSHA1 () where
_FoldSHA1 =
_ManySHA1
instance ManySHA1 () where
_ManySHA1 _ x =
pure x
hash ::
[Word8]
-> SHA1
hash =
SHA1 . SHA1.hash
hashHex ::
SHA1
-> ShowS
hashHex (SHA1 x) =
showHex (SHA1.toInteger x)
showsHash ::
HasSHA1 s =>
s
-> ShowS
showsHash x =
hashHex (x ^. sha1)
showHash ::
HasSHA1 s =>
s
-> String
showHash x =
showsHash x ""