Type inference-the problem of determining whether a program is well-typed-is well-understood. In contrast, elaboration-the task of constructing an explicitly-typed representation of the programseems to have received relatively little attention, even though, in a non-local type inference system, it is non-trivial. We show that the constraint-based presentation of Hindley-Milner type inference can be extended to deal with elaboration, while preserving its elegance. This involves introducing a new notion of "constraint with a value", which forms an applicative functor.