tcVarDecl :: (ProverK loc m) => Scope -> VariableDeclaration Identifier loc -> TcM m (VariableDeclaration GIdentifier (Typed loc))
tcVarDecl scope (VariableDeclaration l isConst isHavoc tyspec vars) = do
    (tyspec') <- tcTypeSpec tyspec False False
    let ty = typed $ loc tyspec'
    (vars') <- mapM (tcVarInit isConst isHavoc scope ty) vars
    return (VariableDeclaration (notTyped "tcVarDecl" l) isConst True tyspec' vars')
tcVarDecl :: (ProverK loc m) => Scope -> VariableDeclaration Identifier loc -> TcM m (VariableDeclaration GIdentifier (Typed loc))
tcVarDecl scope (VariableDeclaration l isConst isHavoc tyspec vars) = do
    (tyspec') <- tcTypeSpec tyspec False False
    let ty = typed $ loc tyspec'
    (vars') <- mapM (tcVarInit isConst isHavoc scope ty) vars
    return (VariableDeclaration (notTyped "tcVarDecl" l) isConst True tyspec' vars')
tcVarDecl scope (VariableDeclaration l isConst isHavoc tyspec vars) = do
    (tyspec') <- tcTypeSpec tyspec False False
    let ty = typed $ loc tyspec'
    (vars') <- mapM (tcVarInit isConst isHavoc scope ty) vars
    return (VariableDeclaration (notTyped "tcVarDecl" l) isConst True tyspec' vars')