diff --git a/Text/Regex/PCRE/Light.hs b/Text/Regex/PCRE/Light.hs index 80c28a0..7fc9581 100644 --- a/Text/Regex/PCRE/Light.hs +++ b/Text/Regex/PCRE/Light.hs @@ -77,6 +77,7 @@ import qualified Data.ByteString as S #if __GLASGOW_HASKELL__ >= 608 import qualified Data.ByteString.Internal as S import qualified Data.ByteString.Unsafe as S +import qualified System.IO.Unsafe as U #else import qualified Data.ByteString.Base as S #endif @@ -193,7 +194,7 @@ compile s o = case compileM s o of -- > Left "nothing to repeat" -- compileM :: S.ByteString -> [PCREOption] -> Either String Regex -compileM str os = unsafePerformIO $ +compileM str os = U.unsafePerformIO $ S.useAsCString str $ \pattern -> do alloca $ \errptr -> do alloca $ \erroffset -> do @@ -263,7 +264,7 @@ compileM str os = unsafePerformIO $ -- is returned. -- match :: Regex -> S.ByteString -> [PCREExecOption] -> Maybe [S.ByteString] -match (Regex pcre_fp _) subject os = unsafePerformIO $ do +match (Regex pcre_fp _) subject os = U.unsafePerformIO $ do withForeignPtr pcre_fp $ \pcre_ptr -> do n_capt <- captureCount' pcre_ptr @@ -324,7 +325,7 @@ match (Regex pcre_fp _) subject os = unsafePerformIO $ do captureCount :: Regex -> Int -captureCount (Regex pcre_fp _) = unsafePerformIO $ do +captureCount (Regex pcre_fp _) = U.unsafePerformIO $ do withForeignPtr pcre_fp $ \pcre_ptr -> do captureCount' pcre_ptr