module Data.PPrint
( pprint
, (===)
) where
import Data.Data.GenRep.Functions (numberErrors)
import Data.Data.GenRep.Doc (Doc, toDoc)
import Data.Data.Eval (eval)
import Data.Data.Compare
import Text.PrettyPrint.HughesPJ (fsep, nest, text, vcat, (<>), (<+>), ($+$))
import Data.Data (Data)
pprint :: Data a => a -> IO Doc
pprint x = do
x <- eval 1 500 x
([x], es) <- numberErrors 0.5 50 500 [x]
return $ toDoc x $+$ nest 2 (showBotts es)
infix 0 ===
(===) :: Data a => a -> a -> IO Doc
a === b = do
(ans, a, b) <- compareData 0.8 0.2 500 a b
let x = showAnswer ans
([a, b], es) <- numberErrors 0.5 50 500 [a, b]
return $ fsep [nest (length x + 1) (toDoc a), text x <+> toDoc b]
$+$ nest 2 (showBotts es)
showBotts :: [(String, String)] -> Doc
showBotts es = vcat $ map f es
where
f (i, e) = text i <> text ":" <+> vcat (map text $ lines e)