    {-# LANGUAGE CPP #-}
    {-# OPTIONS_GHC -fno-warn-orphans #-}
    {-|
    Module:      TextShow.GHC.Fingerprint
    Copyright:   (C) 2014-2017 Ryan Scott
    License:     BSD-style (see the file LICENSE)
    Maintainer:  Ryan Scott
    Stability:   Provisional
    Portability: GHC

    'TextShow' instance for 'Fingerprint'.

    /Since: 2/
    -}
    module TextShow.GHC.Fingerprint () where

    import Data.Semigroup (mtimesDefault)
    import Data.Text.Lazy.Builder (Builder, singleton)
    import Data.Word (Word64)

    import GHC.Fingerprint.Type (Fingerprint(..))

    import Prelude ()
    import Prelude.Compat

    import TextShow.Classes (TextShow(..))
    import TextShow.Data.Integral (showbHex)
    import TextShow.Utils (lengthB)

    -- | /Since: 2/
    instance TextShow Fingerprint where
        showb (Fingerprint w1 w2) = hex16 w1 <> hex16 w2
          where
            hex16 :: Word64 -> Builder
            hex16 i = let hex = showbHex i
                      in mtimesDefault (max 0 $ 16 - lengthB hex) (singleton '0') <> hex