rio-0.1.0.0: src/RIO/Text.hs
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Strict @Text@. Import as:
--
-- > import qualified RIO.Text as Text
--
-- This module does not export any partial functions. For those, see
-- "RIO.Text.Partial"
module RIO.Text
(
-- * Types
Data.Text.Text
-- * Creation and elimination
, Data.Text.pack
, Data.Text.unpack
, Data.Text.singleton
, Data.Text.empty
-- * Basic interface
, Data.Text.cons
, Data.Text.snoc
, Data.Text.append
, Data.Text.uncons
, Data.Text.null
, Data.Text.length
, Data.Text.compareLength
-- * Transformations
, Data.Text.map
, Data.Text.intercalate
, Data.Text.intersperse
, Data.Text.transpose
, Data.Text.reverse
-- ** Case conversion
, Data.Text.toCaseFold
, Data.Text.toLower
, Data.Text.toUpper
, Data.Text.toTitle
-- ** Justification
, Data.Text.justifyLeft
, Data.Text.justifyRight
, Data.Text.center
-- * Folds
, Data.Text.foldl
, Data.Text.foldl'
, Data.Text.foldr
-- ** Special folds
, Data.Text.concat
, Data.Text.concatMap
, Data.Text.any
, Data.Text.all
-- * Construction
-- ** Scans
, Data.Text.scanl
, Data.Text.scanl1 -- scanl1 and scanr1 are /not/ partial
, Data.Text.scanr
, Data.Text.scanr1
-- ** Accumulating maps
, Data.Text.mapAccumL
, Data.Text.mapAccumR
-- ** Generation and unfolding
, Data.Text.replicate
, Data.Text.unfoldr
, Data.Text.unfoldrN
-- * Substrings
-- ** Breaking strings
, Data.Text.take
, Data.Text.takeEnd
, Data.Text.drop
, Data.Text.dropEnd
, Data.Text.takeWhile
, Data.Text.takeWhileEnd
, Data.Text.dropWhile
, Data.Text.dropWhileEnd
, Data.Text.dropAround
, Data.Text.strip
, Data.Text.stripStart
, Data.Text.stripEnd
, Data.Text.splitAt
, Data.Text.break
, Data.Text.span
, Data.Text.group
, Data.Text.groupBy
, Data.Text.inits
, Data.Text.tails
-- ** Breaking into many substrings
, Data.Text.split
, Data.Text.chunksOf
-- ** Breaking into lines and words
, Data.Text.lines
, linesCR
, Data.Text.words
, Data.Text.unlines
, Data.Text.unwords
-- * Predicates
, Data.Text.isPrefixOf
, Data.Text.isSuffixOf
, Data.Text.isInfixOf
-- ** View patterns
, Data.Text.stripPrefix
, Data.Text.stripSuffix
, dropPrefix
, dropSuffix
, Data.Text.commonPrefixes
-- * Searching
, Data.Text.filter
, Data.Text.find
, Data.Text.partition
-- * Indexing
, Data.Text.index
, Data.Text.findIndex
-- * Zipping
, Data.Text.zip
, Data.Text.zipWith
-- * Low level operations
, Data.Text.copy
, Data.Text.unpackCString#
-- * Encoding
, Data.Text.Encoding.encodeUtf8
, Data.Text.Encoding.decodeUtf8With
, Data.Text.Encoding.decodeUtf8'
, Data.Text.Encoding.Error.lenientDecode
) where
import Data.Maybe (fromMaybe)
import Data.Text (Text, stripPrefix, stripSuffix)
import qualified Data.Text
import qualified Data.Text.Encoding
import qualified Data.Text.Encoding.Error
-- | Drop prefix if present, otherwise return original 'Text'.
--
-- @since 0.0.0.0
dropPrefix :: Text -- ^ prefix
-> Text
-> Text
dropPrefix prefix t = fromMaybe t (stripPrefix prefix t)
-- | Drop prefix if present, otherwise return original 'Text'.
--
-- @since 0.0.0.0
dropSuffix :: Text -- ^ suffix
-> Text
-> Text
dropSuffix suffix t = fromMaybe t (stripSuffix suffix t)
-- | 'linesCR' breaks a 'Text' up into a list of `Text`s at newline
-- 'Char's. It is very similar to 'Data.Text.lines', but it also removes
-- any trailing @'\r'@ characters. The resulting 'Text' values do not
-- contain newlines or trailing @'\r'@ characters.
--
-- @since 0.1.0.0
linesCR :: Text -> [Text]
linesCR = map (dropSuffix "\r") . Data.Text.lines