{-# LANGUAGE FlexibleInstances #-} module HaskellWorks.Data.BalancedParens.FindCloseN ( FindCloseN(..) ) where import Data.Word import HaskellWorks.Data.BalancedParens.CloseAt import HaskellWorks.Data.Bits.BitLength import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Naive import HaskellWorks.Data.Positioning import qualified Data.Vector.Storable as DVS import qualified HaskellWorks.Data.BalancedParens.Internal.Slow.FindCloseN.Generic as G class FindCloseN v where findCloseN :: v -> Count -> Count -> Maybe Count instance (CloseAt a, TestBit a, BitLength a) => FindCloseN (BitShown a) where findCloseN = G.findCloseN . bitShown {-# INLINE findCloseN #-} instance FindCloseN [Bool] where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN (DVS.Vector Word8) where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN (DVS.Vector Word16) where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN (DVS.Vector Word32) where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN (DVS.Vector Word64) where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN Word8 where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN Word16 where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN Word32 where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN Word64 where findCloseN = G.findCloseN {-# INLINE findCloseN #-} instance FindCloseN (Naive Word64) where findCloseN = G.findCloseN {-# INLINE findCloseN #-}