{-# 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 #-}