TYPED: word ( a b: class ... -- x: class y ... )
body ;
Word description Like :, defines a new word with a given stack effect in the current vocabulary. The inputs and outputs of the stack effect can additionally be given type annotations in the form a: class. When invoked, the word will attempt to coerce its input values to the declared input types before executing the body, throwing an input-mismatch-error if the types cannot be made to match. The word will likewise attempt to coerce its outputs to their declared types and throw an output-mismatch-error if the types cannot be made to match.
Notes The aforementioned type conversions and checks are structured in such a way that they will be eliminated by the compiler if it can statically determine that the types of the inputs at a call site or of the outputs in the word definition are always correct.
The recursive declaration marks both the generated implementation and its inline wrapper, so recursive typed calls retain their input and output checks.
Examples A version of + specialized for floats, converting other real number types: