module Summoner.Text ( packageToModule , intercalateMap , headToUpper ) where import Relude import qualified Data.Char as C import qualified Data.Text as T -- | Creates module name from the name of the package -- Ex: @my-lovely-project@ — @MyLovelyProject@ packageToModule :: Text -> Text packageToModule = T.concat . map headToUpper . T.splitOn "-" -- | Converts every element of list into 'Text' and then joins every element -- into single 'Text' like 'T.intercalate'. intercalateMap :: Text -> (a -> Text) -> [a] -> Text intercalateMap between showT = T.intercalate between . map showT headToUpper :: Text -> Text headToUpper t = case T.uncons t of Nothing -> "" Just (x, xs) -> T.cons (C.toUpper x) xs