hw-balancedparens-0.4.1.1: src/HaskellWorks/Data/BalancedParens/FindCloseN.hs
{-# 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
-- | Find the position of the corresponding close parenthesis carrying in a number of open parentheses starting from a given position.
--
-- All positions are one based.
--
-- See the reference implementation 'G.findCloseN' for details
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 #-}