public override HeronValue Eval(VM vm)
        {
            HeronValue[] argvals = args.Eval(vm);
            HeronValue   f       = funexpr.Eval(vm);

            return(f.Apply(vm, argvals));
        }
        public override HeronValue Eval(VM vm)
        {
            HeronValue[] argvals = args.Eval(vm);

            if (module == null || module.Length == 0)
            {
                return(type.type.Instantiate(vm, argvals, vm.CurrentModuleInstance));
            }
            else
            {
                ModuleInstance mi = vm.FindModule(module);
                if (module == null)
                {
                    throw new Exception("Could not find module " + module);
                }
                return(type.type.Instantiate(vm, argvals, mi));
            }
        }