printEval prog = do
    forM_ (eval $ compile prog) $ \s -> do
        breakln
        putStr "Code: "
        print $ code s
        putStr "Dump: "
        print $ dump s
        putStr "Stack: "
        print $ stack s
        putStrLn "Heap Objs: "
        putStrLn . unlines . map (\(x,y) -> show x ++ "\t\t" ++ show y) . toList . objects . heap $ s
printEval prog = do
    forM_ (eval $ compile prog) $ \s -> do
        breakln
        putStr "Code: "
        print $ code s
        putStr "Dump: "
        print $ dump s
        putStr "Stack: "
        print $ stack s
        putStrLn "Heap Objs: "
        putStrLn . unlines . map (\(x,y) -> show x ++ "\t\t" ++ show y) . toList . objects . heap $ s
printEval prog = do
    forM_ (eval $ compile prog) $ \s -> do
        breakln
        putStr "Code: "
        print $ code s
        putStr "Dump: "
        print $ dump s
        putStr "Stack: "
        print $ stack s
        putStrLn "Heap Objs: "
        putStrLn . unlines . map (\(x,y) -> show x ++ "\t\t" ++ show y) . toList . objects . heap $ s