This is correct behavior. The former has a CUSK, as all open type families have CUSKs with un-annotated kinds defaulting to Type. The latter does not have a CUSK, because the result kind is unknown. You therefore cannot specialize the k variable in the definition of the latter.
There is a ticket (#10141) about improving the error message here to educate the user about CUSKs, but there's no progress on it. Richard > On Jan 19, 2017, at 5:02 AM, Simon Peyton Jones <[email protected]> wrote: > > Richard > > This works > > type family F (a :: k) > type instance F Maybe = Char > But this does not. Surely it should? > > type family F (a :: k) where -- = r | r -> a where > F Maybe = Char > The latter is rejected with > > Foo.hs:6:5: error: > * Expecting one more argument to `Maybe' > Expected kind `k', but `Maybe' has kind `* -> *' > * In the first argument of `F', namely `Maybe' > In the type family declaration for `F' > If you agree I’ll open a ticket. > > Simon >
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
