Strictness is studied in the context of algebraic languages where functions exhibit ``computational'' behaviour such as partiality, failure or side effects. We propose a general approach to modelling strictness in function application based on Moggi's computational types. In this context, the notion of strictness can be applied to any kind of behaviour, of which partiality is just a special case. For instance, a function f is strict with respect to failure if f(FAIL) = FAIL. The power of the approach that we present derives from the possibility of breaking the notion of computation involved in the evaluation of terms down to elementary components and considering strictness with respect to each component separately.

We consider semantic structure for relating computational types, which we call ``computational legs,'' of which composition of monads is a special case. This allows arbitrary nonstrict functions to be treated with the same degree of abstraction that monads introduce in the treatment of strict program composition. Techniques for modularisation can then be applied.