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