module Control.Category.Printf.String
(module Control.Category.Printf
, printf
, printfLn
, hPrintf
, hPrintfLn
, padLeft
, padRight
) where
import Control.Comonad
import Control.Category.Printf
import System.IO (Handle, hPutStr, hPutStrLn)
printf :: Format String (IO ()) b -> b
printf = printfWith putStr
printfLn :: Format String (IO ()) b -> b
printfLn = printfWith putStrLn
hPrintf :: Handle -> Format String (IO ()) b -> b
hPrintf h = printfWith (hPutStr h)
hPrintfLn :: Handle -> Format String (IO ()) b -> b
hPrintfLn h = printfWith (hPutStrLn h)
padLeft :: String -> Int -> Format String a b -> Format String a b
padLeft s _ f | length s < 1 = f
padLeft s n f = (`mapMonoid` f) $ \x ->
let k = length x
d = n k
in take d (cycle s) ++ x
padRight :: String -> Int -> Format String a b -> Format String a b
padRight s _ f | length s < 1 = f
padRight s n f = (`mapMonoid` f) $ \x ->
let k = length x
d = n k
in x ++ take d (cycle s)