{-# 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 :: BitShown a -> Count -> Maybe Count enclose = a -> Count -> Maybe Count forall v. Enclose v => v -> Count -> Maybe Count enclose (a -> Count -> Maybe Count) -> (BitShown a -> a) -> BitShown a -> Count -> Maybe Count forall b c a. (b -> c) -> (a -> b) -> a -> c . BitShown a -> a forall a. BitShown a -> a bitShown {-# INLINE enclose #-} instance Enclose [Bool] where enclose :: [Bool] -> Count -> Maybe Count enclose [Bool] v = [Bool] -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN [Bool] v Count 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word8) where enclose :: Vector Word8 -> Count -> Maybe Count enclose Vector Word8 v = Vector Word8 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Vector Word8 v Count 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word16) where enclose :: Vector Word16 -> Count -> Maybe Count enclose Vector Word16 v = Vector Word16 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Vector Word16 v Count 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word32) where enclose :: Vector Word32 -> Count -> Maybe Count enclose Vector Word32 v = Vector Word32 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Vector Word32 v Count 1 {-# INLINE enclose #-} instance Enclose (DVS.Vector Word64) where enclose :: Vector Count -> Count -> Maybe Count enclose Vector Count v = Vector Count -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Vector Count v Count 1 {-# INLINE enclose #-} instance Enclose Word8 where enclose :: Word8 -> Count -> Maybe Count enclose Word8 v = Word8 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Word8 v Count 1 {-# INLINE enclose #-} instance Enclose Word16 where enclose :: Word16 -> Count -> Maybe Count enclose Word16 v = Word16 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Word16 v Count 1 {-# INLINE enclose #-} instance Enclose Word32 where enclose :: Word32 -> Count -> Maybe Count enclose Word32 v = Word32 -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Word32 v Count 1 {-# INLINE enclose #-} instance Enclose Word64 where enclose :: Count -> Count -> Maybe Count enclose Count v = Count -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Count v Count 1 {-# INLINE enclose #-} instance Enclose (Naive Word64) where enclose :: Naive Count -> Count -> Maybe Count enclose Naive Count v = Naive Count -> Count -> Count -> Maybe Count forall v. FindOpenN v => v -> Count -> Count -> Maybe Count findOpenN Naive Count v Count 1 {-# INLINE enclose #-}