hw-balancedparens-0.2.0.2: src/HaskellWorks/Data/BalancedParens/NewCloseAt.hs
{-# LANGUAGE FlexibleInstances #-}
module HaskellWorks.Data.BalancedParens.NewCloseAt
( NewCloseAt(..)
, newCloseAt'
) where
import Data.Word
import HaskellWorks.Data.Bits.BitLength
import HaskellWorks.Data.Bits.BitShown
import HaskellWorks.Data.Bits.BitWise
import HaskellWorks.Data.Positioning
import qualified Data.Vector.Storable as DVS
class NewCloseAt v where
newCloseAt :: v -> Count -> Bool
newCloseAt' :: TestBit a => a -> Count -> Bool
newCloseAt' v c = not (v .?. toPosition c)
{-# INLINE newCloseAt' #-}
instance (BitLength a, TestBit a) => NewCloseAt (BitShown a) where
newCloseAt = newCloseAt' . bitShown
{-# INLINE newCloseAt #-}
instance NewCloseAt [Bool] where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt (DVS.Vector Word8) where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt (DVS.Vector Word16) where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt (DVS.Vector Word32) where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt (DVS.Vector Word64) where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt Word8 where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt Word16 where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt Word32 where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}
instance NewCloseAt Word64 where
newCloseAt = newCloseAt'
{-# INLINE newCloseAt #-}