Personal tools

Type inference

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(explanation with example)
 
(wikipedia links)
 
Line 19: Line 19:
 
== See also ==
 
== See also ==
   
The type inference mechanism is very similar to [http://en.wikipedia.org/Unification unification] in [http://en.wikipedia.org/PROLOG PROLOG].
+
The type inference mechanism is very similar to [http://en.wikipedia.org/wiki/Unification unification] in [http://en.wikipedia.org/wiki/PROLOG PROLOG].
 
* Haskell-Cafe: [http://www.haskell.org/pipermail/haskell-cafe/2007-September/031255.html Learn Prolog ...]
 
* Haskell-Cafe: [http://www.haskell.org/pipermail/haskell-cafe/2007-September/031255.html Learn Prolog ...]
   

Latest revision as of 07:35, 29 November 2007

Type inference is a feature of the type system which means that concrete types are deduced by the type system whereever it is obvious.

If you add an integer variable
x
to a numeric literal
2
, then the type system concludes that
2
, which in principle can represent 2 for every number type, must also be an integer, since
+
supports only addition of numbers of the same type.

(This restriction is a good thing, as we explain for the idea of a Generic number type.)

Another example: There are the following standard functions:

map :: (a -> b) -> [a] -> [b]
Char.ord :: (Char -> Int)
For the expression
map ord
the type checker finds out that the type variable
a
must be bound to the type
Char
and
b
must be bound to
Int
and thus it concludes
map ord :: [Char] -> [Int]

You can play with the type inference mechanism in Hugs and GHCi. See Determining the type of an expression.

[edit] See also

The type inference mechanism is very similar to unification in PROLOG.