module Bookhound.Utils.String where import Data.List (intercalate) import Data.Text (Text, unpack) class ToString a where toString :: a -> String instance ToString Char where toString :: Char -> [Char] toString = forall (f :: * -> *) a. Applicative f => a -> f a pure instance ToString Int where toString :: Int -> [Char] toString = forall a. Show a => a -> [Char] show instance ToString Text where toString :: Text -> [Char] toString = Text -> [Char] unpack instance ToString Integer where toString :: Integer -> [Char] toString = forall a. Show a => a -> [Char] show instance ToString Float where toString :: Float -> [Char] toString = forall a. Show a => a -> [Char] show instance ToString Double where toString :: Double -> [Char] toString = forall a. Show a => a -> [Char] show instance (ToString a, Foldable m) => ToString (m a) where toString :: m a -> [Char] toString = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap forall a. ToString a => a -> [Char] toString indent :: Int -> String -> String indent :: Int -> [Char] -> [Char] indent Int n [Char] str = forall a. [a] -> [[a]] -> [a] intercalate [Char] "\n" forall a b. (a -> b) -> a -> b $ [Char] -> [Char] indentLine forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [Char] -> [[Char]] lines [Char] str where indentLine :: [Char] -> [Char] indentLine = (forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat (forall a. Int -> a -> [a] replicate Int n [Char] " ") <>)