<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;">
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">```<br />
exercises.hs:33:13:<br />
    Couldn't match expected type ‘[b0]’ with actual type ‘a’<br />
      ‘a’ is a rigid type variable bound by<br />
          the type signature for myOrderFunc :: a -> a -> Ordering<br />
          at exercises.hs:31:16<br />
    Relevant bindings include<br />
      y :: a (bound at exercises.hs:32:15)<br />
      x :: a (bound at exercises.hs:32:13)<br />
      myOrderFunc :: a -> a -> Ordering (bound at exercises.hs:32:1)<br />
    In the first argument of ‘myLen’, namely ‘x’<br />
    In the first argument of ‘(<)’, namely ‘myLen x’<br />
Failed, modules loaded: none.<br />
```</blockquote>
</div>
<div name="messageSignatureSection"><br />
<div class="matchFont">Your guess is correct. The problem is, Haskell does not consider `a` in `myOrderFunc` and `[b]` in `myLen` equivalent. `a` means you feed the function any type, while `[b]` means it must be a list of values of the same type. So changing `a` to `[a]` woud eliminate the error. </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 24, 2017, 16:33 -0500, Patrik Iselind <patrik.mrx@gmail.com>, wrote:<br />
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;"><br />
<div class="moz-cite-prefix">Den 2017-11-24 kl. 20:04, skrev Quentin Liu:<br /></div>
<blockquote type="cite" cite="mid:5fdec6dc-aeb8-4083-9782-114c0c1c8b6c@Spark" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #e67e22;">
<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 #3498db;">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #d35400;">
<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?<br /></div>
</div>
</blockquote>
Sure, the error i get follows<br />
```<br />
exercises.hs:33:13:<br />
    Couldn't match expected type ‘[b0]’ with actual type ‘a’<br />
      ‘a’ is a rigid type variable bound by<br />
          the type signature for myOrderFunc :: a -> a -> Ordering<br />
          at exercises.hs:31:16<br />
    Relevant bindings include<br />
      y :: a (bound at exercises.hs:32:15)<br />
      x :: a (bound at exercises.hs:32:13)<br />
      myOrderFunc :: a -> a -> Ordering (bound at exercises.hs:32:1)<br />
    In the first argument of ‘myLen’, namely ‘x’<br />
    In the first argument of ‘(<)’, namely ‘myLen x’<br />
Failed, modules loaded: none.<br />
```<br />
Attaching the updated exercises.hs for reference.<br />
<br />
I'm still not very good at interpreting Haskell's error messages, they are quite cryptic to me. My interpretation/guess of the above is that my `a` is too 'wide' or how you express it. Haskell seem to expect some form of list. Most likely since i want a length and lists are perhaps everything in Haskell that can produce a length. I've hardly scratched the surface of what i imagine is Haskell so i cannot say anything for sure yet.<br />
<br />
<blockquote type="cite" cite="mid:5fdec6dc-aeb8-4083-9782-114c0c1c8b6c@Spark" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #e67e22;">
<div name="messageSignatureSection">
<div class="matchFont"><br style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" /></div>
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.<br /></div>
</blockquote>
I'm having a hard time understanding your way of thinking about type signatures. Could you perhaps elaborate a bit more on it?<br />
<br />
// Patrik<br />
_______________________________________________<br />
Beginners mailing list<br />
Beginners@haskell.org<br />
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners<br /></blockquote>
</div>
</body>
</html>