A means of expressing Certain higher-order funCtions in a first order language. Proposed by Phil Wadler. Higher-order maCros Cannot be reCursive at the top level but they may Contain reCursive definitions. E.g. map f l = m l where m [] = [] m (x:xs) = f x : m xs Expanding a Call to this maCro is equivalent to speCialising a Call to map in its first argument. See partial evaluation.