▲ | jasperry 5 days ago | |||||||||||||||||||||||||||||||
Question about terminology: Is it common to call higher-order function types "exponential types" as the article does? I know what higher-order functions are, but am having trouble grasping why the types would be called "exponential". | ||||||||||||||||||||||||||||||||
▲ | xigoi 4 days ago | parent | next [-] | |||||||||||||||||||||||||||||||
ackfoobar has already given a good reason why function types are called exponential, but there is an even deeper reason: function types interact algebraically the same way as exponents. The type A → (B → C) is isomorphic to (A × B) → C (via currying). This is analogous to the rule (cᵇ)ᵃ = cᵇ˙ᵃ. The type (A + B) → C is isomorphic to (A → C) × (B → C) (a function with a case expression can be replaced with a pair of functions). This is analogous to the rule cᵃ⁺ᵇ = cᵃ·cᵇ. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | ackfoobar 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
A first-order function type is already exponential. A sum type has as many possible values as the sum of its cases. E.g. `A of bool | B of bool` has 2+2=4 values. Similarly for product types and exponential types. E.g. the type bool -> bool has 2^2=4 values (id, not, const true, const false) if you don't think about side effects. | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
▲ | nukifw 5 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
Usually we speaking only about sum and product (because article usually refers to ADT, so Algebraic Data type). A function is not really Data, so it is not included. But you can use the same tricks (ie: a -> b has arity b^a) to compute the number of potential inhabitant | ||||||||||||||||||||||||||||||||
▲ | voidhorse 4 days ago | parent | prev | next [-] | |||||||||||||||||||||||||||||||
The answers in the replies are all good but the real reason is because in category theory the construct that models function types is called an "exponential product". The choice of that name stems from the reasons explored in the replies, in particular from the fact that the number of total functions from A to B is aka ways determined by an exponent (cardinality of B raised to the power of cardinality of A) | ||||||||||||||||||||||||||||||||
▲ | vram22 4 days ago | parent | prev [-] | |||||||||||||||||||||||||||||||
I had the same doubt. Here is my uneducated guess: In math, after sum and product, comes exponent :) So they may have used that third term in an analogous manner in the example. |