tcStmt ret (ReturnStatement l Nothing) = tcStmtBlock l "return statement" $ do
    topTcCstrM_ l $ Unifies (ComplexT Void) ret
    let t = StmtType (Set.singleton $ StmtReturn)
    let ret = ReturnStatement (Typed l t) Nothing
    return (ret,t)
tcStmt ret (ReturnStatement l Nothing) = tcStmtBlock l "return statement" $ do
    topTcCstrM_ l $ Unifies (ComplexT Void) ret
    let t = StmtType (Set.singleton $ StmtReturn)
    let ret = ReturnStatement (Typed l t) Nothing
    return (ret,t)
tcStmt ret (ReturnStatement l Nothing) = tcStmtBlock l "return statement" $ do
    topTcCstrM_ l $ Unifies (ComplexT Void) ret
    let t = StmtType (Set.singleton $ StmtReturn)
    let ret = ReturnStatement (Typed l t) Nothing
    return (ret,t)