1{-# LANGUAGE MagicHash #-} 2{-# LANGUAGE OverloadedStrings #-} 3 4-- | Strict @Text@. Import as: 5-- 6-- > import qualified RIO.Text as T 7-- 8-- This module does not export any partial functions. For those, see 9-- "RIO.Text.Partial" 10module RIO.Text 11 ( 12 -- * Types 13 Data.Text.Text 14 15 -- * Creation and elimination 16 , Data.Text.pack 17 , Data.Text.unpack 18 , Data.Text.singleton 19 , Data.Text.empty 20 21 -- * Basic interface 22 , Data.Text.cons 23 , Data.Text.snoc 24 , Data.Text.append 25 , Data.Text.uncons 26 , Data.Text.null 27 , Data.Text.length 28 , Data.Text.compareLength 29 30 -- * Transformations 31 , Data.Text.map 32 , Data.Text.intercalate 33 , Data.Text.intersperse 34 , Data.Text.transpose 35 , Data.Text.reverse 36 37 -- ** Case conversion 38 , Data.Text.toCaseFold 39 , Data.Text.toLower 40 , Data.Text.toUpper 41 , Data.Text.toTitle 42 43 -- ** Justification 44 , Data.Text.justifyLeft 45 , Data.Text.justifyRight 46 , Data.Text.center 47 48 -- * Folds 49 , Data.Text.foldl 50 , Data.Text.foldl' 51 , Data.Text.foldr 52 53 -- ** Special folds 54 , Data.Text.concat 55 , Data.Text.concatMap 56 , Data.Text.any 57 , Data.Text.all 58 59 -- * Construction 60 61 -- ** Scans 62 , Data.Text.scanl 63 , Data.Text.scanl1 -- scanl1 and scanr1 are /not/ partial 64 , Data.Text.scanr 65 , Data.Text.scanr1 66 67 -- ** Accumulating maps 68 , Data.Text.mapAccumL 69 , Data.Text.mapAccumR 70 71 -- ** Generation and unfolding 72 , Data.Text.replicate 73 , Data.Text.unfoldr 74 , Data.Text.unfoldrN 75 76 -- * Substrings 77 78 -- ** Breaking strings 79 , Data.Text.take 80 , Data.Text.takeEnd 81 , Data.Text.drop 82 , Data.Text.dropEnd 83 , Data.Text.takeWhile 84 , Data.Text.takeWhileEnd 85 , Data.Text.dropWhile 86 , Data.Text.dropWhileEnd 87 , Data.Text.dropAround 88 , Data.Text.strip 89 , Data.Text.stripStart 90 , Data.Text.stripEnd 91 , Data.Text.splitAt 92 , Data.Text.break 93 , Data.Text.span 94 , Data.Text.group 95 , Data.Text.groupBy 96 , Data.Text.inits 97 , Data.Text.tails 98 99 -- ** Breaking into many substrings 100 , Data.Text.split 101 , Data.Text.chunksOf 102 103 -- ** Breaking into lines and words 104 , Data.Text.lines 105 , linesCR 106 , Data.Text.words 107 , Data.Text.unlines 108 , Data.Text.unwords 109 110 -- * Predicates 111 , Data.Text.isPrefixOf 112 , Data.Text.isSuffixOf 113 , Data.Text.isInfixOf 114 115 -- ** View patterns 116 , Data.Text.stripPrefix 117 , Data.Text.stripSuffix 118 , dropPrefix 119 , dropSuffix 120 , Data.Text.commonPrefixes 121 122 -- * Searching 123 , Data.Text.filter 124 , Data.Text.find 125 , Data.Text.partition 126 127 -- * Indexing 128 , Data.Text.index 129 , Data.Text.findIndex 130 131 -- * Zipping 132 , Data.Text.zip 133 , Data.Text.zipWith 134 135 -- * Low level operations 136 , Data.Text.copy 137 , Data.Text.unpackCString# 138 139 -- * Encoding 140 , Data.Text.Encoding.encodeUtf8 141 , Data.Text.Encoding.decodeUtf8With 142 , Data.Text.Encoding.decodeUtf8' 143 , Data.Text.Encoding.Error.lenientDecode 144 ) where 145 146import Data.Maybe (fromMaybe) 147import Data.Text (Text, stripPrefix, stripSuffix) 148import qualified Data.Text 149import qualified Data.Text.Encoding 150import qualified Data.Text.Encoding.Error 151 152-- | Drop prefix if present, otherwise return original 'Text'. 153-- 154-- @since 0.0.0.0 155dropPrefix :: Text -- ^ prefix 156 -> Text 157 -> Text 158dropPrefix prefix t = fromMaybe t (stripPrefix prefix t) 159 160-- | Drop prefix if present, otherwise return original 'Text'. 161-- 162-- @since 0.0.0.0 163dropSuffix :: Text -- ^ suffix 164 -> Text 165 -> Text 166dropSuffix suffix t = fromMaybe t (stripSuffix suffix t) 167 168-- | 'linesCR' breaks a 'Text' up into a list of `Text`s at newline 169-- 'Char's. It is very similar to 'Data.Text.lines', but it also removes 170-- any trailing @'\r'@ characters. The resulting 'Text' values do not 171-- contain newlines or trailing @'\r'@ characters. 172-- 173-- @since 0.1.0.0 174linesCR :: Text -> [Text] 175linesCR = map (dropSuffix "\r") . Data.Text.lines 176