tcStmt ret qs@(QuantifiedStatement l q vs anns s) = tcStmtBlock l "quantified statement" $ do
    ppqs <- pp qs
    onlyAnn l ppqs $ tcLocal l "tcStmt quant" $ do
        q' <- tcQuantifier q
        vs' <- mapM (tcQVar l) vs
        mapM_ checkEnsures anns
        anns' <- tcProcedureAnns False anns
        (s',t) <- tcStmts (ComplexT Void) s
        topTcCstrM_ l $ Unifies (ComplexT Void) ret
        return (QuantifiedStatement (Typed l t) q' vs' anns' s',t)
tcStmt ret qs@(QuantifiedStatement l q vs anns s) = tcStmtBlock l "quantified statement" $ do
    ppqs <- pp qs
    onlyAnn l ppqs $ tcLocal l "tcStmt quant" $ do
        q' <- tcQuantifier q
        vs' <- mapM (tcQVar l) vs
        mapM_ checkEnsures anns
        anns' <- tcProcedureAnns False anns
        (s',t) <- tcStmts (ComplexT Void) s
        topTcCstrM_ l $ Unifies (ComplexT Void) ret
        return (QuantifiedStatement (Typed l t) q' vs' anns' s',t)
tcStmt ret qs@(QuantifiedStatement l q vs anns s) = tcStmtBlock l "quantified statement" $ do
    ppqs <- pp qs
    onlyAnn l ppqs $ tcLocal l "tcStmt quant" $ do
        q' <- tcQuantifier q
        vs' <- mapM (tcQVar l) vs
        mapM_ checkEnsures anns
        anns' <- tcProcedureAnns False anns
        (s',t) <- tcStmts (ComplexT Void) s
        topTcCstrM_ l $ Unifies (ComplexT Void) ret
        return (QuantifiedStatement (Typed l t) q' vs' anns' s',t)