This is a continuation of what I wrote on the Haskell Prime mailing list which 
accounts for why this is the eighth in the series. These are lecture notes and 
if anyone has not already noticed from the Haskell Prime mailing list. I am 
giving a lecture.

Type aliases allow you to extend the type system beyond the capabilities of the 
language. For example, natural numbers are not part of the type system, but you 
can say that a number has the natural number type by using a type alias. 
Ensuring that a number is indeed a natural number is your problem. The compiler 
will only ensure that it is at least an integer. There are a variety of 
instances where type aliases are useful. A prominent application in computer 
programming languages is to establish a form verses function relationship. 
Types in functional languages are formal types and not functional types 
ironically.

A common example of this is to define an address type alias where you declare 
it as a string. Yes, it is a string formally, but it does not function as such. 
Its semantics are more specific and so it is not merely a string. How it 
behaves in context will differ and be more specific than a string. To quote 
Dune, "There is a place terrifying to us, women, that we cannot go." The 
compiler cannot go there, but it can verify that it is at least a string. The 
form verses function distinction is especially useful when unifying against a 
tuple. Functional types can in large measure supplant labels. When you know its 
functional type you will usually know enough to know what it is referring to. 
When all you know is its formal type it can be touch and go. It is possible as 
the programmer to develop a set of rules beyond those that ensure that the 
address type is a string that for the benefit of the programmer describe where 
it is grammatically correct for variables of the address type may appear to 
which the compiler is wholly ignorant.

When defining tuple types, type aliases were intended to replace labels. The 
result is more compact. The down side is that to access members unification 
must be employed.

In the C language type aliases can be created using either the C preprocessor 
or the typedef construct. Consequently, this notion of type alias does not 
apply exclusively to functional languages.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to