Abstract. These notes discuss the simultaneous use of generalised fold operators and monads to structure functional programs. Generalised fold operators structure programs after the decomposition of the value they consume. Monads structure programs after the computation of the value they produce. rams abstract both from the recursive processing of their input as well as from the side-e ects in computing their output. We show how generalised monadic folds aid in calculating an e cient graph reduction engine from an ine cient speci cation.