<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">
<div><br /></div>
<div>
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin: 5px; padding-left: 10px; border-left-width: thin; border-left-style: solid; border-left-color: rgb(230, 126, 34);">
<div name="messageBodySection" style="font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Yes, you could pass the function a list of strings as well. A string is just a list of Chars. The type signature `a` does not restrict the range of types you could pass to the function.</div>
</blockquote>
<div> </div>
<div>That seem strange to me. Wouldn't that mean that i could write the declaration of myOrderFunc as `myOrderFunc :: a -> a -> Ordering` as well? GHCI give me an error on this though so obviously it's wrong. I just don't see why. Why cannot a represent [b]?</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
<div name="messageSignatureSection"><br />
<div class="matchFont">Could you copy and paste the error message here? </div>
<div class="matchFont"><br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">The type signature `a` means it could be anything, `String`, `[String]`, or any ADT you could come up with. So in a type signature if you write </div>
<div class="matchFont">  func :: a -> a -> a <br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">     func a b = a <br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">this funciton is telling ghc that I have a function that accepts two parameters that must be of the same type, whatever the type is. So `a` could be an ADT, a list, a list of lists, etc. But if you write </div>
<div class="matchFont">  func :: a -> [b] -> a <br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">  func a bs = a <br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">you are essentially saying this function would only take two parameters of two types (`a` and `b` could be of the same type) and the second parameter must be a list. This, however, does not suggest mean that `[b]` could not be `[[String]]`, for `[String]` could just be thought of as a `b`. The way I use to think about type signature is, when you trying to substitute type variables such as `a`, substitute it into a concrete type that you are working with. </div>
<div class="matchFont"><br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
<div class="matchFont">Regards,
<div style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Qingbo Liu</div>
</div>
</div>
<div name="messageReplySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;"><br />
On Nov 23, 2017, 03:19 -0500, mrx <patrik.mrx@gmail.com>, wrote:<br />
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Wed, Nov 22, 2017 at 10:40 PM, Quentin Liu <span dir="ltr"><<a href="mailto:quentin.liu.0415@gmail.com" target="_blank">quentin.liu.0415@gmail.com</a>></span> wrote:<br />
<blockquote class="gmail_quote" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #e67e22;">
<div>
<div name="messageBodySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">Hi Patrik, 
<div><br /></div>
<div>The reason for the requirement of “Eq a” in your `sortListOfLists` is that you are calling myOrderFunc which carries the signature “Eq a”. If you remove the `Eq` declaration in `myOrderFunc` the compiler then would not complain about the absence of `Eq` in `sortListOfLists`. For a detailed explanation you could reference chapter 6 of Real World Haskell.</div>
</div>
</div>
</blockquote>
<div><br /></div>
<div>Thanks a lot for the reference. I'll make sure to read that chapter soon.<br />
 <br /></div>
<blockquote class="gmail_quote" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #e67e22;">
<div>
<div name="messageBodySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">
<div><br /></div>
<div>Yes, you could pass the function a list of strings as well. A string is just a list of Chars. The type signature `a` does not restrict the range of types you could pass to the function.</div>
</div>
</div>
</blockquote>
<div> </div>
<div>That seem strange to me. Wouldn't that mean that i could write the declaration of myOrderFunc as `myOrderFunc :: a -> a -> Ordering` as well? GHCI give me an error on this though so obviously it's wrong. I just don't see why. Why cannot a represent [b]?<br />
<br /></div>
</div>
// Patrik<br /></div>
</div>
_______________________________________________<br />
Beginners mailing list<br />
Beginners@haskell.org<br />
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners<br /></blockquote>
</div>
</body>
</html>