+ bindingLetter i = case iToE i of
+ HeapGraphEntry _ c -> case c of
+ ThunkClosure {..} -> 't'
+ SelectorClosure {..} -> 't'
+ APClosure {..} -> 't'
+ PAPClosure {..} -> 'f'
+ BCOClosure {..} -> 't'
+ FunClosure {..} -> 'f'
+ _ -> 'x'
+
+ ppBinbingMap = M.fromList $
+ concat $
+ map (zipWith (\j (i,c) -> (i, [c] ++ show j)) [(1::Int)..]) $
+ groupBy ((==) `on` snd) $
+ sortBy (compare `on` snd)
+ [ (i, bindingLetter i) | i <- bindings ]
+
+ ppVar i = ppBinbingMap M.! i
+ ppBinding i = ppVar i ++ " = " ++ ppEntry 0 (iToE i)