{-# LANGUAGE FlexibleInstances #-}

module HaskellWorks.Data.RankSelect.CsPoppy.Internal.Nice where

import HaskellWorks.Data.Bits.BitShow
import HaskellWorks.Data.RankSelect.CsPoppy
import HaskellWorks.Data.RankSelect.CsPoppy.Internal.CsInterleaved

import qualified HaskellWorks.Data.RankSelect.CsPoppy.Internal.Alpha0 as A0
import qualified HaskellWorks.Data.RankSelect.CsPoppy.Internal.Alpha1 as A1

import qualified Data.Vector.Storable as DVS

newtype Nice a = Nice a deriving Nice a -> Nice a -> Bool
(Nice a -> Nice a -> Bool)
-> (Nice a -> Nice a -> Bool) -> Eq (Nice a)
forall a. Eq a => Nice a -> Nice a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Nice a -> Nice a -> Bool
$c/= :: forall a. Eq a => Nice a -> Nice a -> Bool
== :: Nice a -> Nice a -> Bool
$c== :: forall a. Eq a => Nice a -> Nice a -> Bool
Eq

instance Show (Nice CsPoppy) where
  showsPrec :: Int -> Nice CsPoppy -> ShowS
showsPrec Int
_ (Nice CsPoppy
rsbs) = String -> ShowS
showString String
"CsPoppy "
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
"{ csPoppyBits = "   ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> [String] -> ShowS
forall a. Show a => a -> ShowS
shows (Word64 -> String
forall a. BitShow a => a -> String
bitShow (Word64 -> String) -> [Word64] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector Word64 -> [Word64]
forall a. Storable a => Vector a -> [a]
DVS.toList (CsPoppy -> Vector Word64
csPoppyBits     CsPoppy
rsbs))
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
", csPoppyIndex0 = CsPoppyIndex"
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
"{ csPoppyLayerM = " ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> [CsInterleaved] -> ShowS
forall a. Show a => a -> ShowS
shows (Word64 -> CsInterleaved
CsInterleaved (Word64 -> CsInterleaved) -> [Word64] -> [CsInterleaved]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector Word64 -> [Word64]
forall a. Storable a => Vector a -> [a]
DVS.toList (CsPoppyIndex -> Vector Word64
A0.csPoppyLayerM (CsPoppy -> CsPoppyIndex
csPoppyIndex0 CsPoppy
rsbs)))
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
", csPoppyLayerS = " ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> Vector Word64 -> ShowS
forall a. Show a => a -> ShowS
shows (CsPoppyIndex -> Vector Word64
A0.csPoppyLayerS (CsPoppy -> CsPoppyIndex
csPoppyIndex0 CsPoppy
rsbs))
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
" }"
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
", csPoppyIndex1 = CsPoppyIndex"
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
"{ csPoppyLayerM = " ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> [CsInterleaved] -> ShowS
forall a. Show a => a -> ShowS
shows (Word64 -> CsInterleaved
CsInterleaved (Word64 -> CsInterleaved) -> [Word64] -> [CsInterleaved]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector Word64 -> [Word64]
forall a. Storable a => Vector a -> [a]
DVS.toList (CsPoppyIndex -> Vector Word64
A1.csPoppyLayerM (CsPoppy -> CsPoppyIndex
csPoppyIndex1 CsPoppy
rsbs)))
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
", csPoppyLayerS = " ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> Vector Word64 -> ShowS
forall a. Show a => a -> ShowS
shows (CsPoppyIndex -> Vector Word64
A1.csPoppyLayerS (CsPoppy -> CsPoppyIndex
csPoppyIndex1 CsPoppy
rsbs))
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
" }"
    ShowS -> ShowS -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> ShowS
showString String
" }"