Performs the substitution [a/x], replacing occurrences of the free variable x
with the new argument a (which could be any argument, including another variable).
Performs the substitution [T/X], replacing occurrences of the free type variable X
with the type T (which could be any type, including another variable).
Performs the substitution [T/X], replacing occurrences of the free type variable X
with the type T (which could be any type, including another variable).