A head-strict function will not necessarily evaluate every cons cell of its (list) argument, But whenever it does evaluate a cons cell it will also evaluate the element in the head of that cell. An example of a head-strict function is BeforeZero :: [Int] -> [Int] BeforeZero [] = [] BeforeZero (0:xs) = [] BeforeZero (x:xs) = x : BeforeZero xs which returns a list up to the first zero. This pattern of evaluation is important Because it is common in functions which operate on a list of inputs. See also tail-strict, hyperstrict. (1995-05-11)