module Domain.Text where

import qualified Data.Char as Char
import Data.Text
import Domain.Prelude

mapFirstChar :: (Char -> Char) -> Text -> Text
mapFirstChar :: (Char -> Char) -> Text -> Text
mapFirstChar Char -> Char
fn =
  forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (\(Char
a, Text
b) -> Char -> Text -> Text
cons (Char -> Char
fn Char
a) Text
b)
    forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Maybe (Char, Text)
uncons

ucFirst :: Text -> Text
ucFirst :: Text -> Text
ucFirst =
  (Char -> Char) -> Text -> Text
mapFirstChar Char -> Char
Char.toUpper

lcFirst :: Text -> Text
lcFirst :: Text -> Text
lcFirst =
  (Char -> Char) -> Text -> Text
mapFirstChar Char -> Char
Char.toLower