A Functional Pattern System for Object-Oriented Design

  • The 'some pages' link to the c2 wiki (aka Portland Patterns Repository) has a good overview.

    My key take-away:

    > Since FunctorObjects are an enabling mechanism for LazyEvaluation some of the caveats for LazyEvaluation should be noted here. LazyEvaluation makes it impossible to know the exact order in which operations will be executed and in fact makes it possible for some operations not to be executed at all. It is therefore important to ensure that the FunctorObjects that may be lazily evaluated do not rely on state that may change during the time when LazyEvaluation may occur and that it does not change state that is relied on by other operations that may occur during the same time period. FunctorObjects? that can have side-effects are called Procedure Objects by ThomasKuehne. These are very useful but some care must be taken with the timing of their side-effects.

    [0] http://wiki.c2.com/?FunctionalPatternSystemForObjectOriented...