<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:Arial;
        color:navy;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-GB link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Hello, I wonder if someone could answer
the following&#8230;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The short question is what does @ mean in <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>mulNat a b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | a &lt;= b = mulNat' a b b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | otherwise = mulNat' b a a<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; where<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font size=2
color=navy face=Arial><span lang=FR style='font-size:10.0pt;font-family:Arial;
color:navy'>mulNat' x@(S a) y orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'>| x == one = y<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = mulNat' a
(addNat orig y) orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The long version, explaining what
everything means is&#8230;.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;here's a definition of multiplication on
natural numbers I'm reading<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;on a blog....<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;data Nat = Z | <st1:place w:st="on">S Nat</st1:place><o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; deriving Show<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;one :: Nat<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;one = (S Z)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat :: Nat -&gt; Nat
-&gt; Nat<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat _ Z = Z<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat Z _ = Z<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat a b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | a &lt;= b = mulNat' a b b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | otherwise = mulNat' b a a<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; where<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mulNat' x@(S a)
y orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | x == one = y<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| otherwise = mulNat' a
(addNat orig y) orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;Haskell programmers seem to have a very
irritating habit of trying to<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;be overly concise...which makes learnign
the language extremely<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;hard...this example is actually
relatively verbose....but anyway...<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;Z looks like Zero...S is the successor
function...Nat are the<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&quot;Natural&quot; numbers.....<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat _ Z = Z<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat Z _ = Z<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;translates to...<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;x * 0 = 0....fine...<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;0 * x = 0....fine..<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat a b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | a &lt;= b = mulNat' a b b<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; | otherwise = mulNat' b a a<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp; where<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mulNat' x@(S a)
y orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | x == one = y<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = mulNat' a
(addNat orig y) orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;is a bit more problematic...<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;lets take a as 3 and b as 5...<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;so now we have<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat' 3 5 5<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;but what does the &quot;x@(S a)&quot;
mean? in<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'>&nbsp;mulNat' x@(S a) y orig<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=FR
style='font-size:10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='margin-left:36.0pt;text-align:center'><font
size=3 face="Times New Roman"><span lang=EN-US style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal style='margin-left:36.0pt'><b><font size=2 face=Tahoma><span
lang=EN-US style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>From:</span></font></b><font
size=2 face=Tahoma><span lang=EN-US style='font-size:10.0pt;font-family:Tahoma'>
haskell-cafe-bounces@haskell.org [mailto:haskell-cafe-bounces@haskell.org] <b><span
style='font-weight:bold'>On Behalf Of </span></b>Nicholls, Mark<br>
<b><span style='font-weight:bold'>Sent:</span></b> 21 December 2007 17:47<br>
<b><span style='font-weight:bold'>To:</span></b> David Menendez<br>
<b><span style='font-weight:bold'>Cc:</span></b> Jules Bean;
haskell-cafe@haskell.org<br>
<b><span style='font-weight:bold'>Subject:</span></b> RE: [Haskell-cafe] nice
simple problem for someone struggling....</span></font><span lang=EN-US><o:p></o:p></span></p>

</div>

<p class=MsoNormal style='margin-left:36.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>Let me
resend the code&#8230;as it stands&#8230;.<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>module</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> <st1:place w:st="on">Main</st1:place> </span></font><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>where</span></font></b><font
size=2 face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>data</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> SquareType numberType = Num numberType =&gt;
SquareConstructor numberType</span></font><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>class</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> ShapeInterface shape </span></font><b><font size=2
color="#0000c4" face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:#0000C4;font-weight:bold'>where</span></font></b><font
size=2 face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>&nbsp; &nbsp;&nbsp;&nbsp; area :: Num numberType =&gt; shape</span></font><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>-&gt;</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'>numberType</span></font><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>data</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> ShapeType = forall a. ShapeInterface a =&gt;
ShapeType a</span></font><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>instance</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> (Num a) =&gt; ShapeInterface (SquareType a) </span></font><b><font
size=2 color="#0000c4" face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New";color:#0000C4;font-weight:bold'>where</span></font></b><font
size=2 color=black face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:black'> </span></font><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>&nbsp;&nbsp;&nbsp; area (SquareConstructor side) = side * side<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>and the errors are for the instance declaration&#8230;&#8230;.<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=2
color=black face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>[1 of 1] Compiling
<st1:place w:st="on">Main</st1:place>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
( Main.hs, C:\Documents and Settings\nichom\Haskell\Shapes2\out/Main.o )<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>Main.hs:71:36:<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;
Couldn't match expected type `numberType' against inferred type `a'<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
`numberType' is a rigid type variable bound by<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the
type signature for `area' at Main.hs:38:15<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
`a' is a rigid type variable bound by<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
the instance declaration at Main.hs:70:14<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;
In the expression: side * side<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;
In the definition of `area':<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt;text-autospace:none'><font size=1
face=Tahoma><span style='font-size:8.0pt;font-family:Tahoma'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
area (SquareConstructor side) = side * side</span></font><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>I&#8217;m
becoming lost in errors I don&#8217;t comprehend&#8230;.<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:36.0pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>What
bamboozles me is it seemed such a minor enhancement.<o:p></o:p></span></font></p>

<div>

<div style='margin-left:36.0pt'>

<div class=MsoNormal align=center style='margin-left:36.0pt;text-align:center'><font
size=3 face="Times New Roman"><span lang=EN-US style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

</div>

<p class=MsoNormal style='margin-left:72.0pt'><b><font size=2 face=Tahoma><span
lang=EN-US style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>From:</span></font></b><font
size=2 face=Tahoma><span lang=EN-US style='font-size:10.0pt;font-family:Tahoma'>
d4ve.menendez@gmail.com [mailto:d4ve.menendez@gmail.com] <b><span
style='font-weight:bold'>On Behalf Of </span></b>David Menendez<br>
<b><span style='font-weight:bold'>Sent:</span></b> 21 December 2007 17:05<br>
<b><span style='font-weight:bold'>To:</span></b> Nicholls, Mark<br>
<b><span style='font-weight:bold'>Cc:</span></b> Jules Bean;
haskell-cafe@haskell.org<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Haskell-cafe] nice
simple problem for someone struggling....</span></font><span lang=EN-US><o:p></o:p></span></p>

</div>

<p class=MsoNormal style='margin-left:72.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-left:72.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>On Dec 21, 2007 11:50 AM,
Nicholls, Mark &lt;<a href="mailto:Nicholls.Mark@mtvne.com">Nicholls.Mark@mtvne.com</a>&gt;
wrote:<o:p></o:p></span></font></p>

<div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;
margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'>

<p class=MsoNormal style='margin-left:72.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>Now I have....<br>
<br>
module <st1:place w:st="on">Main</st1:place> where<br>
<br>
data SquareType numberType = Num numberType =&gt; SquareConstructor<br>
numberType<o:p></o:p></span></font></p>

</blockquote>

<div>

<p class=MsoNormal style='margin-left:72.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'><br>
This is a valid declaration, but I don't think it does what you want it to. The
constraint on numberType applies only to the data constructor. <br>
<br>
That is, given an unknown value of type SquareType a for some a, we do not have
enough information to infer Num a.<br>
<br>
For your code, you want something like:<br>
<br>
instance (Num a) =&gt; ShapeInterface (SquareType a) where <br>
&nbsp;&nbsp;&nbsp; area (SquareConstructor side) = side * side<o:p></o:p></span></font></p>

</div>

</div>

<p class=MsoNormal style='margin-left:72.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'><br>
-- <br>
Dave Menendez &lt;<a href="mailto:dave@zednenem.com">dave@zednenem.com</a>&gt;<br>
&lt;<a href="http://www.eyrie.org/~zednenem/">http://www.eyrie.org/~zednenem/ </a>&gt;
<o:p></o:p></span></font></p>

</div>

</body>

</html>