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 700 x
let ([x'], es) = numberErrors [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 700 a b
let x = showAnswer ans
let ([a', b'], es) = numberErrors [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)