tcStmtBlock :: ProverK loc m => loc -> String -> TcM m a -> TcM m a
tcStmtBlock l msg m = tcProgress (Just $ locpos l) (Just msg) $ do
    doResolve <- getDoResolve
    debugTc $ liftIO $ putStrLn $ "tcStmtBlock " ++ pprid (locpos l) ++ " " ++ show doResolve
    if doResolve
        then tcNew (locpos l) msg $ do
            x <- m
            solveTop l msg
            return x
        else tcAddDeps l msg m
tcStmtBlock :: ProverK loc m => loc -> String -> TcM m a -> TcM m a
tcStmtBlock l msg m = tcProgress (Just $ locpos l) (Just msg) $ do
    doResolve <- getDoResolve
    debugTc $ liftIO $ putStrLn $ "tcStmtBlock " ++ pprid (locpos l) ++ " " ++ show doResolve
    if doResolve
        then tcNew (locpos l) msg $ do
            x <- m
            solveTop l msg
            return x
        else tcAddDeps l msg m
tcStmtBlock l msg m = tcProgress (Just $ locpos l) (Just msg) $ do
    doResolve <- getDoResolve
    debugTc $ liftIO $ putStrLn $ "tcStmtBlock " ++ pprid (locpos l) ++ " " ++ show doResolve
    if doResolve
        then tcNew (locpos l) msg $ do
            x <- m
            solveTop l msg
            return x
        else tcAddDeps l msg m