Do not do an ambiguity check on the type in a GHCi ":kind" command
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 27 May 2013 16:27:33 +0000 (17:27 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 28 May 2013 08:25:07 +0000 (09:25 +0100)
Otherwise we get errors for polykinded type families;
   type family F a :: *
Then :k F
would give an ambiguity check trying to unify (F k1) with (F k2),
which is all a bit stupid.

I found this when investigating Trac #7939

compiler/typecheck/TcValidity.lhs

index 3a828da..e232598 100644 (file)
@@ -61,6 +61,12 @@ import Data.List        ( (\\) )
 \begin{code}
 checkAmbiguity :: UserTypeCtxt -> Type -> TcM ()
 checkAmbiguity ctxt ty
+  | GhciCtxt <- ctxt    -- Allow ambiguous types in GHCi's :kind command
+  = return ()           -- E.g.   type family T a :: *  -- T :: forall k. k -> *
+                        -- Then :k T should work in GHCi, not complain that
+                        -- (T k) is ambiguous!
+
+  | otherwise
   = do { allow_ambiguous <- xoptM Opt_AllowAmbiguousTypes
        ; unless allow_ambiguous $ 
     do {(subst, _tvs) <- tcInstSkolTyVars (varSetElems (tyVarsOfType ty))