ipprint-0.3: IPPrint.hs
module IPPrint(pshow, pprint) where
import Language.Haskell.Parser
import Language.Haskell.Pretty
import Text.Read
pshow :: Show a => a -> String
pshow v =
case parseModule ("value = "++s) of
ParseOk m -> tidy $ prettyPrint m
ParseFailed _ _ -> s
where
s = show v
tidy x =
case readPrec_to_S skipBoring 0 x of
[((), tail)] -> " " ++ tail
_ -> s
pprint :: Show a => a -> IO ()
pprint = putStrLn . pshow
skipBoring :: ReadPrec ()
skipBoring =
do { Ident "value" <- lexP; Punc "=" <- lexP; return () } <++
do { lexP; skipBoring }