hoogle-5.0: src/General/Str.hs
{-# LANGUAGE PatternGuards #-}
-- | ByteString wrappers which don't require special imports and are all UTF8 safe
module General.Str(
Str, strPack, strUnpack, strReadFile, strSplitInfix, strNull, strConcat, strStripPrefix, strStripSuffix, strLines, strTrimStart, strUnlines, strUnwords,
LStr, lstrPack, lstrUnpack, lstrLines, lstrToChunks, lstrFromChunks, lstrToStr,
Str0, join0, split0
) where
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.UTF8 as US
import qualified Data.ByteString.Lazy.Char8 as LBS
import qualified Data.ByteString.Lazy.UTF8 as LUS
import Data.Char
import Data.List
type Str = BS.ByteString
type LStr = LBS.ByteString
strPack :: String -> Str
strPack = US.fromString
strUnpack :: Str -> String
strUnpack = US.toString
strReadFile :: FilePath -> IO Str
strReadFile = BS.readFile
strSplitInfix :: Str -> Str -> Maybe (Str, Str)
strSplitInfix needle haystack
| (a,b) <- BS.breakSubstring needle haystack
, not $ BS.null b
= Just (a, BS.drop (BS.length needle) b)
strSplitInfix _ _ = Nothing
strNull :: Str -> Bool
strNull = BS.null
strConcat :: [Str] -> Str
strConcat = BS.concat
strStripPrefix :: Str -> Str -> Maybe Str
strStripPrefix needle x
| BS.isPrefixOf needle x = Just $ BS.drop (BS.length needle) x
| otherwise = Nothing
strStripSuffix :: Str -> Str -> Maybe Str
strStripSuffix needle x
| BS.isSuffixOf needle x = Just $ BS.take (BS.length x - BS.length needle) x
| otherwise = Nothing
strTrimStart :: Str -> Str
strTrimStart = BS.dropWhile isSpace
strUnlines :: [Str] -> Str
strUnlines = BS.unlines
strLines :: Str -> [Str]
strLines = BS.lines
strUnwords :: [Str] -> Str
strUnwords = BS.unwords
lstrLines :: LStr -> [LStr]
lstrLines = LBS.lines
lstrToChunks :: LStr -> [Str]
lstrToChunks = LBS.toChunks
lstrToStr :: LStr -> Str
lstrToStr = LBS.toStrict
lstrFromChunks :: [Str] -> LStr
lstrFromChunks = LBS.fromChunks
lstrUnpack :: LStr -> String
lstrUnpack = LUS.toString
lstrPack :: String -> LStr
lstrPack = LUS.fromString
type Str0 = Str
join0 :: [String] -> Str0
join0 = BS.pack . intercalate "\0"
split0 :: Str0 -> [Str]
split0 = BS.split '\0'