public A Generate <A>(atom name, Func <atom, int, int, A> build) { if (_alreadyAssignedCount.ContainsKey(name)) { return(build(name, _alreadyAssignedCount[name], _alreadyAssignedAbs[name])); } return(_generator.Generate(name, (p, n, abs) => { _alreadyAssignedCount[p] = n; _alreadyAssignedAbs[p] = abs; return build(p, n, abs); })); }