make Text.Printf extensible, more flexible
Simon Marlow
simonmarhaskell at gmail.com
Tue May 16 05:25:55 EDT 2006
John Meacham wrote:
> I was wondering if we could make Text.Printf extensible to user defined
> types.
>
> as far as I can tell, all that is needed is to export PrintfArg so that
> users can define new instances. it would also be nice if UPrintf could
> be switched from the current union type to a higher order function,
> since the only thing UPrintf is used for is formating strings. I am
> thinking something like
>
> newtype UPrintf = UPrintf (UFmt -> ShowS)
>
> data Adjustment = LeftAdjust | ZeroPad
>
> data UFmt = UFmt {
> fmtAdjust :: Maybe Adjustment,
> fmtFieldWidth :: Maybe Int,
> fmtPrecision :: Maybe Int,
> fmtCharacter :: Char
> }
>
Or do away with UPrintf completely:
class PrintfArg a where
formatArg :: a -> UFmt -> Maybe ShowS
(in other words, type UPrintf = UFmt -> Maybe ShowS). It must return a
Maybe because the formatting char might be wrong.
We would probably have to supply some combinators for building PrintfArg
instances, they share a lot of code.
Cheers,
Simon
More information about the Libraries
mailing list