Currying is most easily understood by starting with an informal definition, which can then be molded to fit many different domains. First, there is some notation to be established. The notation formula_41 denotes all functions from formula_3 to formula_4. If formula_1 is such a function, we write formula_45. Let formula_46 denote the ordered pairs of the elements of formula_3 and formula_4 respectively, that is, the Cartesian product of formula_3 and formula_4. Here, formula_3 and formula_4 may be sets, or they may be types, or they may be other kinds of objects, as explored below.