<div dir="auto">Hi,<div dir="auto"><br></div><div dir="auto">the first time you asked for the type of the function MakeTriple, which as you expected takes 3 arguments of generic types a, b and c and returns something of type (a,b,c). </div><div dir="auto"><br></div><div dir="auto">The second time you asked for the type of MakeTriple applied to three specific arguments. This time the result is no more the type of a function, but is just the type of the result, which is exactly the same as the type of</div><div dir="auto"><span style="font-family:sans-serif;font-size:12.8px">(123,"Hi",234.0)</span><br></div><div dir="auto"><span style="font-family:sans-serif;font-size:12.8px"><br></span></div><div dir="auto"><span style="font-family:sans-serif">Maybe now your question is why that expression has the type you obtain.</span><span style="font-family:sans-serif;font-size:12.8px"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">First of all, what is at the left of the symbol</span></div><div dir="auto"><span style="font-family:sans-serif">=></span></div><div dir="auto"><span style="font-family:sans-serif">are class constraints. This means that they tell you that now c is not "any type" (as it was in the type of MakeTriple), but is "any type in the class Fractional". So it could be for example of type Float or Double, which are two different types but both in the class Fractional. </span></div><div dir="auto"><span style="font-family:sans-serif">Similarly Num a means that a can be "any type in the class Num" (so it can be Int, Integer, Float etc.).</span></div><div dir="auto"><span style="font-family:sans-serif">The same class constraint you obtain if you ask for the type of 12.</span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">Then at the right of the => symbol, you have the type of your expression, where a and c are not completely generic types, because of the contraints expressed before.</span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><font face="sans-serif">happy new year,</font></div><div dir="auto"><font face="sans-serif">Ut</font></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il ven 1 gen 2021, 06:15 Lawrence Bottorff <<a href="mailto:borgauf@gmail.com">borgauf@gmail.com</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I put this into ghci<div><br></div><div>makeTriple :: a -> b -> c -> (a,b,c)<br>makeTriple x y z = (x,y,z)<br></div><div><br></div><div>then as expected</div><div><br></div><div>> :t makeTriple</div><div>: makeTriple :: a -> b -> c -> (a, b, c)<br></div><div><br></div><div>but then on a whim I try this</div><div><br></div><div>> :t (makeTriple 123 "Hi" 234.0)</div><div> (makeTriple 123 "Hi" 234.0)<br>   :: (Fractional c, Num a) => (a, [Char], c)<br></div><div><br></div><div>I retry</div><div><br></div><div>> :t (123,"Hi",234.0)</div><div>(123,"Hi",234.0) :: (Fractional c, Num a) => (a, [Char], c)<br></div><div><br></div><div>What is this telling me? I'm not experienced enough to decode this.</div><div><br></div><div>LB</div></div>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank" rel="noreferrer">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>