type inference

from The Free On-line Dictionary of Computing (8 July 2008)
type inference

   <programming> An {algorithm} for ascribing types to
   expressions in some language, based on the types of the
   constants of the language and a set of type inference rules
   such as

   	f :: A -> B,  x :: A
   	---------------------  (App)
   	      f x :: B

   This rule, called "App" for application, says that if
   expression f has type A -> B and expression x has type A then
   we can deduce that expression (f x) has type B.  The
   expressions above the line are the premises and below, the
   conclusion.  An alternative notation often used is:

   	G |- x : A

   where "|-" is the turnstile symbol ({LaTeX} \vdash) and G is a
   type assignment for the free variables of expression x.  The
   above can be read "under assumptions G, expression x has type
   A".  (As in Haskell, we use a double "::" for type
   declarations and a single ":" for the {infix} list constructor,
   cons).

   Given an expression

   	plus (head l) 1

   we can label each subexpression with a type, using type
   variables X, Y, etc. for unknown types:

   	(plus :: Int -> Int -> Int)
   		(((head :: [a] -> a) (l :: Y)) :: X)
   		(1 :: Int)

   We then use {unification} on {type variables} to match the
   {partial application} of plus to its first argument against
   the App rule, yielding a type (Int -> Int) and a substitution
   X = Int.  Re-using App for the application to the second
   argument gives an overall type Int and no further
   substitutions.  Similarly, matching App against the
   application (head l) we get Y = [X].  We already know X = Int
   so therefore Y = [Int].

   This process is used both to infer types for expressions and
   to check that any types given by the user are consistent.

   See also {generic type variable}, {principal type}.

   (1995-02-03)
    

[email protected]