On 08/05/2011, at 10:31 PM, Rhythmic Fistman wrote:
> You take a function f:a->b and wrap a up to get a new function with no
> arguments, like this:
It's a closure, or a specialisation, or perhaps even a projection.
Basically you're taking some domain a and a function
k: c -> a
and composing them:
g (x) = f ( k (x) )
g = f . k (in forward notation)
In your case you picked
k: 1 -> a
so the composition is g: 1 -> b
> Is that 1 standard notation?
In category theory, yes. 1 is "unit", a canonical type with 1 value.
In Felix that value is (), the empty tuple. In set theory, any set
is a unit (singleton). Note this is not the same as 0, aka void,
the type with NO values, or the empty set.
f: 1 -> A
is sometime called an "constant function" because it picks out
a single element from A. For example:
twenty: 1 -> Z given by
twenty () = 20
v: 0 -> A
is sometimes called the characteristic function of A, since it is THE
unique function from the empty set to A.
> I picked it up from Felix.
In Felix, 0,1,2,3,4 .. etc are sums of n units eg 2 = 1 + 1 aka "bool",
a type with two values.
Unfortunately + is not associative: the type 2 + 1 is not equal to 3
(although they're isomorphic). Similarly tuple formation * isn't associative:
(1,(2,3)) != (1,2,3) != ((1,2),3)
BTW the names of values of a unit sum in Felix are like
case 0 of 2 (aka "false")
case 1 of 2 (aka "true")
You can find these definitions in the library. Note case numbers are unfortunately
zero origin, there's no case 2 of 2 even though that reads better ;(
For symmetry with C arrays.