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