Internal Hom

In Category Theory objects are described as Universal Objects. The internal hom is one of these objects. In the well known Category Set it is the function object. This means that it is possible to encode a function

a = f(b)

with type signature

$$ f : A \rightarrow B $$

as a set of tuples

$$ \{ <a, f(b)> | b \in B \} $$

This is related currying . It is the opposite operation. Currying takes a function which works on two arguments transforms it into a function with one argument which then returns a function with one argument. The opposite operation is known as `uncurry` in Haskell.

uncurry :: (a -> b -> c) -> (a, b) -> c uncurry f a b = f (a, b)

The function curry looks as follows:

curry :: ((a, b) -> c) -> a -> b -> c curry f (a, b) = f a b