Here is the rule for the subtype of the function:
, -.
Co-variant == "A" B " .
Contra-variant == ( " " ) .
, :
f1: int -> bool
f2: bool -> bool
, f2 f1. ? (1) , , "bool - int" -. ints bools. (2) , , .
( , ):
: " , , , , ".
co-variant : " , , , / , , "
, , :
f1: {x,y,z} -> {x,y}
f2: {x,y} -> {x,y,z}
, , f2 f1 ( ). ( < " " ), f2 < f1, {x, y, z} {x, y}? - . {x, y, z} {x, y}. .. {x, y, z} "" {x, y}, , z.
, f2 < f1, {x, y} > {x, y, z}? . (. ).
- , f2 < f1, , . (psuedo-code):
F1 = f1;
F2 = f2;
{a,b} = F1({1,2,3});
{a,b,c} = F2({1,2});
{a,b} = ((F1) F2)({1,2,3});