    {-# 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.Compat (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 -> Builder
    showb (Fingerprint Word64
    w1 Word64
    w2) = Word64 -> Builder
    hex16 Word64
    w1 Builder -> Builder -> Builder
    forall a. Semigroup a => a -> a -> a
    <> Word64 -> Builder
    hex16 Word64
    w2
          where
            hex16 :: Word64 -> Builder
            hex16 :: Word64 -> Builder
    hex16 Word64
    i = let hex :: Builder
    hex = Word64 -> Builder
    forall a. (Integral a, TextShow a) => a -> Builder
    showbHex Word64
    i
                      in Int64 -> Builder -> Builder
    forall b a. (Integral b, Monoid a) => b -> a -> a
    mtimesDefault (Int64 -> Int64 -> Int64
    forall a. Ord a => a -> a -> a
    max Int64
    0 (Int64 -> Int64) -> Int64 -> Int64
    forall a b. (a -> b) -> a -> b
    $ Int64
    16 Int64 -> Int64 -> Int64
    forall a. Num a => a -> a -> a
    - Builder -> Int64
    lengthB Builder
    hex) (Char -> Builder
    singleton Char
    '0') Builder -> Builder -> Builder
    forall a. Semigroup a => a -> a -> a
    <> Builder
    hex