<div dir="ltr">There's a number of weirdnesses currently that basically fall out of the fact that the kinds Constraint and * are treated identically internally. See <a href="https://ghc.haskell.org/trac/ghc/ticket/11715">https://ghc.haskell.org/trac/ghc/ticket/11715</a> and stay tuned; it's not going to be fixed for 8.2 but probably will for 8.4 --- unless more bugs come crawling out of the woodwork, as has been happening a lot if you look at the ticket history. :)</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 15, 2017 at 5:09 PM, Al Zohali <span dir="ltr"><<a href="mailto:zohl@fmap.me" target="_blank">zohl@fmap.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Cafe!<br>
<br>
I've encountered quite strange behaviour in GHC (v8.0.2) and I would<br>
like to ask you to give me a hint.<br>
<br>
Suppose we have the following functions:<br>
----<br>
foo :: (Show a) => Int -> a -> [String]<br>
foo n = replicate n . show<br>
<br>
bar :: Int -> (Show a) => a -> [String]<br>
bar n = replicate n . show<br>
<br>
baz :: Int -> a -> (Show a) => [String]<br>
baz n = replicate n . show<br>
----<br>
<br>
This won't compile, and that is ok. But if we add `RankNTypes`<br>
extension, this will compile and (:t) will give us the same signature<br>
for all three functions.<br>
<br>
There are two things I cannot get:<br>
<br>
1) Why do this even compile?<br>
I saw constraints being defined either in the beginning of a signature<br>
or right after `forall` expression. I thought that it was a rule (or<br>
convention), but it's not. Is this way of declaring constraints (in<br>
the middle of a signature) discouraged or can be considered as a bug?<br>
<br>
2) Even if this was supposed to be so, why was the constraint in `baz`<br>
hoisted to the top?<br>
There are at least two ways to interpret that signature:<br>
----<br>
baz :: Int -> a -> forall a. (Show a) => [String]<br>
baz :: forall a. (Show a) => Int -> a -> [String]<br>
----<br>
Is there any reason why the second one was chosen?<br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div>