<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Data constructor I is a GADT constructor -- it constrains the values of its return type. Specifically, it says that T's two parameters must be the same. K is not a GADT constructor (it's just a GADT-syntax constructor), as it doesn't constraint the return type at all. In order to use a GADT constructor in a type, you need -XTypeInType; this ability was not available before GHC 8.0.<div class=""><br class=""></div><div class="">There are concrete plans to smooth out this wrinkle: <a href="https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0020-no-type-in-type.rst" class="">https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0020-no-type-in-type.rst</a></div><div class=""><br class=""></div><div class="">I hope this helps!</div><div class="">Richard<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On May 3, 2018, at 5:24 PM, Tom Ellis <<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk" class="">tom-lists-haskell-cafe-2013@jaguarpaw.co.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Can anyone explain why the type instance for K is fine but the one for I<br class="">needs TypeInType?  (It does indeed work when I turn on TypeInType.)<br class=""><br class=""><br class=""><br class="">{-# LANGUAGE GADTs #-}<br class="">{-# LANGUAGE TypeFamilies #-}<br class="">{-# LANGUAGE DataKinds #-}<br class="">{-# LANGUAGE PolyKinds #-}<br class=""><br class="">data T a b where<br class="">  K :: b -> T a b<br class="">  I :: T a a<br class=""><br class="">type family F (a :: T ka kb)<br class=""><br class="">-- Data constructor ā€˜Iā€™ cannot be used here<br class="">--        (Perhaps you intended to use TypeInType)<br class="">-- type instance F 'I = ()<br class=""><br class="">type instance F ('K b) = ()<br class="">_______________________________________________<br class="">Haskell-Cafe mailing list<br class="">To (un)subscribe, modify options or view archives go to:<br class=""><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br class="">Only members subscribed via the mailman list are allowed to post.</div></div></blockquote></div><br class=""></div></body></html>