Why do we need to delay this constructor? I'd prefer to take another argument and fully construct the object, instead of a closure. The reason is that the closure might capture a lot of variables from the environment, and it seems that it is immediately applied at all call sites.