<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=iso-8859-1 http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18852"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px" 
id=MailContainerBody leftMargin=0 topMargin=0 CanvasTabStop="true" 
name="Compose message area">
<DIV><FONT size=4 face="LM Mono 12">This is a continuation of&nbsp;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.</FONT></DIV>
<DIV><FONT size=4 face="LM Mono 12"></FONT>&nbsp;</DIV>
<DIV><FONT size=4 face="LM Mono 12">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. </FONT><FONT size=4 face="LM Mono 12">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.</FONT></DIV>
<DIV><FONT size=4 face="LM Mono 12"></FONT>&nbsp;</DIV>
<DIV><FONT size=4 face="LM Mono 12">A common example of this is to define an 
address type alias&nbsp;where you declare it&nbsp;as a&nbsp;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&nbsp;touch and go. </FONT><FONT size=4 face="LM Mono 12">It is possible 
as the programmer to develop a set of rules beyond those that&nbsp;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.</FONT></DIV>
<DIV><FONT size=4 face="LM Mono 12"></FONT>&nbsp;</DIV>
<DIV><FONT size=4 face="LM Mono 12">When defining tuple types, type aliases were 
intended to&nbsp;replace labels. The result is more compact. The down side is 
that to access members unification must be employed.</FONT></DIV>
<DIV><FONT size=4 face="LM Mono 12"></FONT>&nbsp;</DIV>
<DIV><FONT size=4 face="LM Mono 12">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.</FONT></DIV></BODY></HTML>