private static ILease <Y> Do <X, Y>(this ILendable <Y> output, Action <X, Y> render, ILease <X> lease) { return(lease.Extract(value => { var target = output.GetLease(); render(value, target.Value); return target; })); }