{-# LANGUAGE NoImplicitPrelude #-} module StringUtils ( strip, lstrip, rstrip, replace, split, splitFirst, ) where import IHaskellPrelude import qualified Data.Text as T import Data.List.Split (splitOn) import qualified Data.List.Split as Split lstrip :: String -> String lstrip :: String -> String lstrip = (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] dropWhile (Char -> String -> Bool forall a. Eq a => a -> [a] -> Bool forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool `elem` (String " \t\r\n" :: String)) rstrip :: String -> String rstrip :: String -> String rstrip = String -> String forall a. [a] -> [a] reverse (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String lstrip (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String forall a. [a] -> [a] reverse strip :: String -> String strip :: String -> String strip = String -> String rstrip (String -> String) -> (String -> String) -> String -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String lstrip replace :: String -> String -> String -> String replace :: String -> String -> String -> String replace String needle String replacement String haystack = Text -> String T.unpack (Text -> String) -> Text -> String forall a b. (a -> b) -> a -> b $ HasCallStack => Text -> Text -> Text -> Text Text -> Text -> Text -> Text T.replace (String -> Text T.pack String needle) (String -> Text T.pack String replacement) (String -> Text T.pack String haystack) split :: String -> String -> [String] split :: String -> String -> [String] split = String -> String -> [String] forall a. Eq a => [a] -> [a] -> [[a]] splitOn splitFirst :: String -> String -> [String] splitFirst :: String -> String -> [String] splitFirst String delim String str = let (String head:String _:[String] tail) = Splitter Char -> String -> [String] forall a. Splitter a -> [a] -> [[a]] Split.split (String -> Splitter Char forall a. Eq a => [a] -> Splitter a Split.onSublist String delim) String str in [String head, [String] -> String forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat [String] tail]