<p dir="ltr">Indeed, I hadn't come to use that at the type level; the original code used my own types which ended up holding LocalTime; I used Float as a simplification as it displayed the same weird behaviour.</p>
<p dir="ltr">I guess in the act of randomly walking parseable type family code I have inadvertently unearthed a bug, which someone else inadvertently fixed, making me a sort of human QuickCheck.</p>
<div class="gmail_quote">On 22 Jul 2014 10:57, "Simon Peyton Jones" <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I don't know why 7.6.3 accepts it.  'Float' is a valid type but not a valid kind.  For it to be a useful kind we'd need float literal at the type level, and we have no such thing.  You can use Nat instead, which does exist at the type level.<br>

<br>
Simon<br>
<br>
| -----Original Message-----<br>
| From: Glasgow-haskell-users [mailto:<a href="mailto:glasgow-haskell-users-">glasgow-haskell-users-</a><br>
| <a href="mailto:bounces@haskell.org">bounces@haskell.org</a>] On Behalf Of cheater00 .<br>
| Sent: 21 July 2014 18:51<br>
| To: <a href="mailto:glasgow-haskell-users@haskell.org">glasgow-haskell-users@haskell.org</a><br>
| Subject: Type family stopped compiling on upgrade from GHC 7.6.3 to<br>
| 7.8.3<br>
|<br>
| Hi, I was experimenting a bit with type families recently and ran into<br>
| a bit of an issue. Given that I don't know type families that well yet,<br>
| I was wondering if I made an error somewhere. One thing is that I can't<br>
| find any relevant changes in the GHC release notes for 7.8.1, .2 or .3.<br>
|<br>
| Maybe this code contains an error which 7.6.3 simply wasn't able to<br>
| find?<br>
|<br>
| Thanks.<br>
|<br>
| --------<br>
|<br>
| -- this code compiles in 7.6.3, but breaks in 7.8.3 with the following<br>
| message:<br>
| -- TypeFamilies.hs:14:31:<br>
| --     ‘End’ of kind ‘*’ is not promotable<br>
| --     In the kind ‘End’<br>
| -- In 7.6.3, using :kind!, I can see that the type synonyms contained<br>
| in the family do work the way I intend them to.<br>
|<br>
|<br>
| {-# Language<br>
|     GADTs<br>
|   , TypeFamilies<br>
|   , DataKinds<br>
|    #-}<br>
| module TypeFamilies where<br>
|<br>
| data End = Least | Spot Float | Most<br>
|   deriving (Eq, Show)<br>
|<br>
| data Interval = IntervalCons { left :: End, right :: End }<br>
|   deriving (Eq, Show)<br>
|<br>
| type family   Interval2 (a :: End) (b :: End) :: Interval<br>
| type instance Interval2  Least      Most      =  IntervalCons  Least<br>
| Most<br>
| type instance Interval2 (Spot l)    Most      =  IntervalCons (Spot l)<br>
| Most<br>
| type instance Interval2  Least     (Spot r)   =  IntervalCons  Least<br>
| (Spot r)<br>
| type instance Interval2 (Spot l)   (Spot r)   =  IntervalCons (Spot l)<br>
| (Spot r)<br>
| _______________________________________________<br>
| Glasgow-haskell-users mailing list<br>
| <a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
| <a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
</blockquote></div>