<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple" style="word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">That&#8217;s odd. Please do create&nbsp; ticket, thank you!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> glasgow-haskell-users-bounces@haskell.org [mailto:glasgow-haskell-users-bounces@haskell.org]
<b>On Behalf Of </b>Reiner Pope<br>
<b>Sent:</b> 18 January 2012 04:44<br>
<b>To:</b> glasgow-haskell-users@haskell.org<br>
<b>Subject:</b> PolyKinds: couldn't match kind `BOX' against `*'<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Hi all,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I think I've found a GHC bug in PolyKinds, but I'm not sure if it's a bug, or whether I misunderstand GHC's kind system.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Consider this module:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">&gt; {-# LANGUAGE PolyKinds #-}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt;&nbsp;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; module Test where<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt;&nbsp;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; data Proxy t = ProxyC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt;&nbsp;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; test :: Proxy '[Int, Bool]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; test = ProxyC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- doesn't compile<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; -- test = undefined &nbsp; &nbsp; -- compiles<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Under&nbsp;ghc-7.4.0.20111219, this fails to compile, with error message<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; /tmp/test3/Test.hs:8:8:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; Couldn't match kind `BOX' against `*'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; Kind incompatibility when matching types:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; &nbsp; k0 :: BOX<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; &nbsp; [*] :: *<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; In the expression: ProxyC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; &nbsp; &nbsp; In an equation for `test': test = ProxyC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I think GHC is wrong in flagging an error here.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Here's how I understand it. The type constructor Proxy has kind<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; Proxy :: forall (k :: BOX). k -&gt; *<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">The value constructor ProxyC has type<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; ProxyC :: forall (k :: BOX). forall (t :: k). Proxy t<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">The type '[Int, Bool] has kind<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; '[Int, Bool] :: [*]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">But what is the sort of [*]? The GHC manual (<a href="http://www.haskell.org/ghc/dist/stable/docs/html/users_guide/kind-polymorphism-and-promotion.html">http://www.haskell.org/ghc/dist/stable/docs/html/users_guide/kind-polymorphism-and-promotion.html</a>)
 says &quot;all kinds have sort BOX&quot;, and so we should have<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; [*] :: BOX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(1)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">However, the error message above seems to suggest that<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">&gt; [*] :: * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(2)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">which disagrees with (1).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">To add to the confusion, note that the module compiles if the line &quot;test = ProxyC&quot; is replaced by &quot;test = undefined&quot;. So it seems that (1) holds when checking the type signature, but (2) holds when checking the expression.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">As I said, I suspect this is simply a GHC bug, but I'm not sure. Should I post a bug report on GHC Trac?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Cheers,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Reiner<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</div>
</div>
</body>
</html>