This paper introduces a pattern for almost compositional functions
over recursive data types, and over families of mutually recursive
data types. Here ``almost compositional'' means that for all of the
constructors in the type(s), except a limited number of them, the
result of the function depends only on the constructor and the results
of calling the function on the constructor's arguments. The pattern
consists of a generic part constructed once for each data type or
family of data types, and a task-specific part. The generic part
contains the code for the predictable compositional cases, leaving the
interesting work to the task-specific part. Examples of the pattern
are given, implemented in dependent type theory with inductive
families, in Haskell with generalized algebraic data types and rank-2
polymorphism, and in Java using a variant of the Visitor design
pattern. The relationships to the ``Scrap Your Boilerplate'' approach
to generic programming, and to general tree types in dependent type
theory, are investigated by reimplementing our operations using those
frameworks.