<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
<RTE_TEXT><BR>
Hi all. I'm attempting exercise 4.6 from Daume's Yet Another Haskell Tutorial:<BR>
&nbsp;<BR><B><FONT face="Times New Roman" size=2><FONT face="Times New Roman" size=2>
<P align=left><FONT size=3>Exercise 4.6 </FONT></B></FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman"><FONT size=3>Write a datatype </FONT></I></FONT></FONT><FONT face=Courier><FONT face=Courier size=3>Tuple </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman"><FONT size=3>which can hold one, two, three or four elements,</FONT></P>
<P align=left><FONT size=3>depending on the constructor (that is, there should be four constructors, one for each</FONT></P>
<P align=left><FONT size=3>number of arguments). Also provide functions </FONT></I></FONT></FONT><FONT size=3><FONT face=Courier><FONT face=Courier>tuple1 </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman">through </I></FONT></FONT></FONT><FONT face=Courier><FONT face=Courier size=3>tuple4 </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman"><FONT size=3>which take a</FONT></P>
<P align=left><FONT size=3>tuple and return </FONT></I></FONT></FONT><FONT size=3><FONT face=Courier><FONT face=Courier>Just </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman">the value in that position, or </I></FONT></FONT></FONT><FONT face=Courier><FONT face=Courier size=3>Nothing </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman"><FONT size=3>if the number is invalid</FONT></P>
<FONT size=3>(i.e., you ask for the </FONT></I></FONT></FONT><FONT size=3><FONT face=Courier><FONT face=Courier>tuple4 </FONT></FONT><I><FONT face="Times New Roman"><FONT face="Times New Roman">on a tuple holding only two elements)<BR></I></FONT></FONT></FONT>
&nbsp;<BR>
For starters, I began with the following, stored in a file called MyTuple.hs:<BR>
&nbsp;<BR>
<STRONG>data myTuple a b c d = my4Tuple a b c d</STRONG><BR>
<STRONG>| my3Tuple a b c</STRONG><BR>
<STRONG>| my2Tuple a b</STRONG><BR>
<STRONG>| my1Tuple a</STRONG><BR>
<STRONG>deriving (Show)</STRONG><BR>
&nbsp;<BR>
When I load this into WinHugs I get the following error:<BR>
&nbsp;<BR><FONT color=#af0000 size=2><FONT color=#af0000 size=2>
file:.\MyTuple.hs:1 - Syntax error in data declaration (unexpected symbol "a")<BR></FONT></FONT>
&nbsp;<BR>
However&nbsp;I get the same error if I reduce it to a single data constructor, in an effort to create&nbsp;just a quadruple:<BR>
&nbsp;<BR>
<STRONG>data myTuple a b c d = my4Tuple a b c d</STRONG><BR>
&nbsp;<BR>
What is even more odd is that I have the following code in a file called Pair.hs:<BR>
&nbsp;<BR>
<STRONG>{-data Pair a b = Pair a b<BR>&nbsp;deriving (Show)<BR>pairFst (Pair x y) = x<BR>pairSnd (Pair x y) = y</STRONG><BR>
<STRONG>data Quadruple a b c d = Quadruple a a b b<BR>&nbsp;deriving (Show)<BR>fstPairofQuad (Quadruple a b c d) = [a,b]<BR>sndPairofQuad (Quadruple a b c d) = [c,d]<BR>-}</STRONG><BR>
<BR><STRONG>data Quad a b c d = QuadFour a b c d | QuadThree a b c | QuadTwo a b | QuadOne a<BR>&nbsp;deriving (Show)<BR></STRONG><BR>
<STRONG>{-<BR>fstPairofQuad (QuadFour a b c d) = (a,b)<BR>mdlPairofQuad (QuadFour a b c d) = (b,c)<BR>sndPairofQuad (QuadFour a b c d) = (c,d)<BR>fstLstofQuad (QuadFour a b c d) = (a,d)-}</STRONG><BR>
&nbsp;<BR>
Whether I just keep Quad visible in the file or I take away both pairs of comment braces, when I load that file into WinHugs it works fine,<BR>
and I have no trouble constructing a Quad&nbsp;or using any of the QuadFour utility fcns (which, admittedly are not what is called for in the exercise...<BR>
but that's probably besides the point). <BR>
&nbsp;<BR>
What in the world might be causing the error in the MyTuple file?<BR>
&nbsp;<BR>
Thanks,<BR>
David<BR></body>
</html>