tcStmt :: (ProverK loc m) => Type -- ^ return type
    -> Statement Identifier loc -- ^ input statement
    -> TcM m (Statement GIdentifier (Typed loc),Type)
tcStmt ret (CompoundStatement l s) = tcStmtBlock l "compound statement" $ do
    (ss',t) <- tcLocal l "tcStmt compound" $ tcStmts ret s
    return (CompoundStatement (Typed l t) ss',t)
tcStmt :: (ProverK loc m) => Type -- ^ return type
    -> Statement Identifier loc -- ^ input statement
    -> TcM m (Statement GIdentifier (Typed loc),Type)
tcStmt ret (CompoundStatement l s) = tcStmtBlock l "compound statement" $ do
    (ss',t) <- tcLocal l "tcStmt compound" $ tcStmts ret s
    return (CompoundStatement (Typed l t) ss',t)
tcStmt ret (CompoundStatement l s) = tcStmtBlock l "compound statement" $ do
    (ss',t) <- tcLocal l "tcStmt compound" $ tcStmts ret s
    return (CompoundStatement (Typed l t) ss',t)