1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
import Text.Show.Pretty
import System.Environment
import System.IO(hPutStrLn,stderr)
main :: IO ()
main =
do as <- getArgs
case as of
["--test"] -> interactLn (show . selftest1)
[] -> interactLn $ \s -> case parseValue s of
Just v -> show (ppValue v)
Nothing -> s
_ -> hPutStrLn stderr $ unlines
[ "usage: ppsh < showed_value > pretty_value"
, " --test Self test: True means we passed."
]
interactLn :: (String -> String) -> IO ()
interactLn f = interact f >> putStrLn ""
selftest :: Value -> Bool
selftest v = case parseValue $ show $ ppValue v of
Just v1 -> v1 == v
Nothing -> False
selftest1 :: String -> Bool
selftest1 txt = case parseValue txt of
Just v -> selftest v
Nothing -> True
|