<div dir="ltr"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div bgcolor="#FFFFFF" text="#000000">I think that more intuitive/understandable would be something like<br><br>    'b' has too rigid type for 'a' ...<br><br>At least, that is what I have to tell myself when I encounter this issue<br>

</div></blockquote><div><br></div></div><div>I don't think this is quite correct.</div><div><br></div><div>As I'm a daily Java programmer, one thing that really troubled me was to think as `a' being something like `Object', but it is wrong.</div>

<div><br></div><div>The `a' really means that the client of the function can define the type it wants, and be precise.</div><div>I guess it's easier to see this in the value (result) of a function: "f :: a -> b" is a function that takes any value and produces any value the user wants, i.e. I can take an Int out of it, or a Double, or a String, or a Foo, or a Bar. That's a huge difference between Java's "Object f(Object a)" (a better comparison would be with "<A, B> B f(A a);", I guess).</div>

<div><br></div><div>I'm diverging a bit, but what I want to say is that there is no way to tell that the type of "b" is "too rigid" for the type `a' , because the `a' can be anything, even the exact type of "b".</div>

<div><br></div></div></div></div></div></div>