{-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE RankNTypes #-} module Text.PrintfA where import Text.Printf data PrintfArgT = forall a. PrintfArg a => P a data PrintfTypeT = T { PrintfTypeT -> forall r. PrintfType r => r unT :: forall r. PrintfType r => r } printfa :: PrintfType t => String -> [ PrintfArgT ] -> t printfa :: String -> [PrintfArgT] -> t printfa String format = PrintfTypeT -> t PrintfTypeT -> forall r. PrintfType r => r unT (PrintfTypeT -> t) -> ([PrintfArgT] -> PrintfTypeT) -> [PrintfArgT] -> t forall b c a. (b -> c) -> (a -> b) -> a -> c . (PrintfTypeT -> PrintfArgT -> PrintfTypeT) -> PrintfTypeT -> [PrintfArgT] -> PrintfTypeT forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl (\(T forall r. PrintfType r => r r) (P a a) -> (forall r. PrintfType r => r) -> PrintfTypeT T ((forall r. PrintfType r => r) -> PrintfTypeT) -> (forall r. PrintfType r => r) -> PrintfTypeT forall a b. (a -> b) -> a -> b $ a -> r forall r. PrintfType r => r r a a ) ((forall r. PrintfType r => r) -> PrintfTypeT T ((forall r. PrintfType r => r) -> PrintfTypeT) -> (forall r. PrintfType r => r) -> PrintfTypeT forall a b. (a -> b) -> a -> b $ String -> r forall r. PrintfType r => String -> r printf String format)