module Export.Generic where
import Ast
import Text.PrettyPrint
isIntegral :: Double -> Bool
isIntegral x = x == fromInteger (round x)
pointsDoc :: Double -> Doc
pointsDoc v | isNaN v = empty
pointsDoc v | isIntegral v = integer (round v)
pointsDoc v = double v
unify :: Judgement -> Judgement -> Maybe Judgement
unify
(Judgement (lh, _, lcs, []))
(Judgement (rh, rps, rcs, _))
| lh == rh && lcs == rcs = do
pure $ Judgement (lh, rps, lcs, [])
unify
(Judgement (lh, _, lcs, ljs))
(Judgement (rh, rps, rcs, rjs))
| lh == rh && lcs == rcs = do
newJs <- mapM (uncurry unify) (zip ljs rjs)
pure $ Judgement (lh, rps, lcs, newJs)
unify (Bonus l) (Bonus r) | l == r =
pure $ (Bonus l)
unify _ _ = Nothing
summary :: Word -> Judgement -> Judgement
summary _ (Bonus (p, _)) =
(Bonus (p, []))
summary 0 (Judgement (h, _, _, _)) =
Judgement (h, [], [], [])
summary depth (Judgement (h, _, _, js)) =
Judgement (h, [], [], map (summary $ depth 1) js)