public EvalObject Visit(AstNode.FunCall v) { var fun = Eval(v.fun); return(fun switch { EvalObject.Int _ => throw new EvalException(v.pos, "Int is not callable"), EvalObject.Builtin b => b.Call(Eval(v.arg)), EvalObject.Lambda l => l.Call(Eval(v.arg), this), _ => throw new InvalidOperationException(), });