{-# LANGUAGE FlexibleInstances #-} module HaskellWorks.Data.BalancedParens.Enclose ( Enclose(..) ) where import Data.Word import HaskellWorks.Data.BalancedParens.FindOpenN import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Naive import HaskellWorks.Data.Positioning import qualified Data.Vector.Storable as DVS class Enclose v where enclose :: v -> Count -> Maybe Count instance (Enclose a) => Enclose (BitShown a) where enclose = enclose . bitShown {-# INLINE enclose #-} instance Enclose [Bool] where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word8) where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word16) where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word32) where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word64) where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose Word8 where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose Word16 where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose Word32 where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose Word64 where enclose v = findOpenN v 1 {-# INLINE enclose #-} instance Enclose (Naive Word64) where enclose v = findOpenN v 1 {-# INLINE enclose #-}