module Text.Regex.Do.Split
(Split(..),
SplitFront(..),
SplitEnd(..),
T,L
) where
import qualified Data.ByteString.Search as S
import Data.ByteString as B hiding (break, breakEnd, split)
import Prelude hiding (break,(/))
import Text.Regex.Do.Match.Matchf
type T = (B.ByteString,B.ByteString)
type L = [B.ByteString]
class Split out where
(/)::ByteString -> ByteString -> out
instance Split (ByteString,ByteString) where
/ :: ByteString -> ByteString -> (ByteString, ByteString)
(/) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = (ByteString
h1,ByteString
t2)
where (h1 :: ByteString
h1,t1 :: ByteString
t1) = ByteString -> ByteString -> (ByteString, ByteString)
S.breakOn ByteString
pat1 ByteString
body0
len1 :: Int
len1 = ByteString -> Int
B.length ByteString
pat1
t2 :: ByteString
t2 = Int -> ByteString -> ByteString
B.drop Int
len1 ByteString
t1
!pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0
class SplitFront out where
(-/)::ByteString
-> ByteString
-> out
instance SplitFront (ByteString,ByteString) where
-/ :: ByteString -> ByteString -> (ByteString, ByteString)
(-/) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = ByteString -> ByteString -> (ByteString, ByteString)
S.breakOn ByteString
pat1 ByteString
body0
where !pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0
class SplitEnd out where
(/-)::ByteString
-> ByteString
-> out
instance SplitEnd (ByteString,ByteString) where
/- :: ByteString -> ByteString -> (ByteString, ByteString)
(/-) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = ByteString -> ByteString -> (ByteString, ByteString)
S.breakAfter ByteString
pat1 ByteString
body0
where !pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0
instance Split [ByteString] where
/ :: ByteString -> ByteString -> [ByteString]
(/) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = ByteString -> ByteString -> [ByteString]
S.split ByteString
pat1 ByteString
body0
where !pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0
instance SplitFront [ByteString] where
-/ :: ByteString -> ByteString -> [ByteString]
(-/) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = ByteString -> ByteString -> [ByteString]
S.splitKeepFront ByteString
pat1 ByteString
body0
where !pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0
instance SplitEnd [ByteString] where
/- :: ByteString -> ByteString -> [ByteString]
(/-) body0 :: ByteString
body0 pat0 :: ByteString
pat0 = ByteString -> ByteString -> [ByteString]
S.splitKeepEnd ByteString
pat1 ByteString
body0
where !pat1 :: ByteString
pat1 = ByteString -> ByteString
checkPattern ByteString
pat0