An extension is used to build a copy of a type with conversion functions
between the original and the copy.  Its syntax is:

        extend { type_expression }

The signature of the result is the signature of the type expression with
the addition of the following two components, where t is the local type
name, i.e. refers to the type itself:

        In:  func [val type_expression] val t
        Out: func [val t] val type_expression

The type_expression is evaluated as part of the evaluation of the extension.

A variant Shrt of the builtin type Short that provides a function for
adding "Short"s to "Shrt"s, but is otherwise incompatible with it,
could be declared as:

    Shrt == extend {Short} with S {
		+ == func[x: val Short; y: val S]  val S {
			    S$In[x] + y
		     }
	    } hide { In; Out }
