<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Nov 22, 2017 at 10:47 PM, Francesco Ariis <span dir="ltr"><<a href="mailto:fa-ml@ariis.it" target="_blank">fa-ml@ariis.it</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Patrik,<br>
<span class=""><br>
On Wed, Nov 22, 2017 at 10:15:59PM +0100, Patrik Iselind wrote:<br>
> My question is the following. Why do i need to add "Eq a =>" to the type<br>
> definition of sortListOfLists?<br>
<br>
</span>Like you guessed, it doesn't! Just change the signature of `myOrderFunc`<br>
to:<br>
<br>
    myOrderFunc :: [a] -> [a] -> Ordering<br>
<br>
(Eq isn't needed, as the implementation shows).<br>
Remember that you can arbitrarily write more restrictive signatures<br>
than the inferred ones! It is useful to state your intent, in this<br>
case it serves no purpose, so it's correct to get rid of the `Eq`<br>
constraint.<br>
<span class=""><br>
> Another thought i have is if i really have to specify that i expect list of<br>
> lists. Couldn't that be list of something else with a length, a string<br>
> perhaps, just as well? In other words a type like sortListOfLists :: a -> a.<br>
> As i see it that should be just as valid as the type of what i return is the<br>
> same as that which i get as input regardless of it being a list or not.<br>
<br>
</span>`sortBy` signature is<br>
<br>
    sortBy :: (a -> a -> Ordering) -> [a] -> [a]<br>
<br>
It demands a list of something (prelude Strings are lists too, specifically<br>
`[Char]`). That "something" is dictated by myOrderFunc (`[a]`), hence<br>
[[a]], no way around it.<br>
<br>
Was this clear?</blockquote><div><br></div><div>Yes please, thank you.<br><br></div><div>// Patrik<br></div></div><br></div></div>