This paper is concerned with the time-analysis of functional programs. Techniques which enable us to reason formally about a program's execution costs have had relatively little attention in the study of functional programming. We concentrate here on the construction of equations which compute the time-complexity of expressions in a lazy higher-order languages. The problem with higher-order functions is that complexity is dependent on the cost of applying functional parameters. Structures called {\it cost-closures} are introduced to allow us to model both functional parameters {\it and} the cost of their application. The problem with laziness is that complexity is dependent on {\it context}. Projections are used to characterise the context in which an expression is evaluated, and cost-equations are parameterised by this context-description to give a compositional time-analysis. Using this form of context information we introduce two types of time-equations, which together provide bound on the exact time-complexity.