-- TODO: check specific syscalls?

tcSyscallParam :: (ProverK loc m) => SyscallParameter Identifier loc -> TcM m (SyscallParameter GIdentifier (Typed loc))
tcSyscallParam (SyscallPush l e) = do
    e' <- withExprC ReadWriteExpr $ tcVariadicArg (tcExpr Nothing) e
    let t = SysT $ SysPush $ typed $ loc $ fst e'
    return $ SyscallPush (Typed l t) e'
tcSyscallParam :: (ProverK loc m) => SyscallParameter Identifier loc -> TcM m (SyscallParameter GIdentifier (Typed loc))
tcSyscallParam (SyscallPush l e) = do
    e' <- withExprC ReadWriteExpr $ tcVariadicArg (tcExpr Nothing) e
    let t = SysT $ SysPush $ typed $ loc $ fst e'
    return $ SyscallPush (Typed l t) e'
tcSyscallParam (SyscallPush l e) = do
    e' <- withExprC ReadWriteExpr $ tcVariadicArg (tcExpr Nothing) e
    let t = SysT $ SysPush $ typed $ loc $ fst e'
    return $ SyscallPush (Typed l t) e'