#summary Explanation and usage of type inference. #labels Glossary,Usage = Type Inference = Type inference is when a compiler can deduces the type of a variable or function that isn't explicitly declared in the source code, by examining how it is declared and used. The Cat interpreter will explicitly infer the type of a quotation using either the `type_of` primitive function or using the `#t` [MetaCommand meta-command]. The `#t` meta-command shows the step by step process of deriving a type. == Examples == Example 1: {{{ >> [dup dup] #t Before unification: ('S0 't1 -> 'S2 't3 't3) 'S0 't1 't1 = 'S2 't3 Constraints: 'S2 = 'S0 't1 't3 = 't1 Unifiers: 't3 = 't4 't1 = 't4 'S2 = 'S0 't4 [dup dup] : ('S0 't4 -> 'S0 't4 't4 't4) stack: _empty_ }}} Example 2: {{{ >> [swap pop swap] #t Before unification: ('S0 't1 't2 -> 'S3) 'S0 't2 't1 = 'S3 't4 Constraints: 'S3 = 'S0 't2 't4 = 't1 Unifiers: 't4 = 't5 't1 = 't5 'S3 = 'S0 't2 Before unification: ('S6 't7 't8 -> 'S9 't11 't10) 'S6 't8 = 'S9 't10 't11 Constraints: 'S6 = 'S9 't10 't11 = 't8 Unifiers: 't11 = 't12 't8 = 't12 'S6 = 'S9 't10 [swap pop swap] : ('S9 't10 't7 't12 -> 'S9 't12 't10) }}}