Make Template Haskell classInstances function return [ClassInstance]
authorsimonpj@microsoft.com <unknown>
Thu, 13 Jan 2011 11:14:21 +0000 (11:14 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 13 Jan 2011 11:14:21 +0000 (11:14 +0000)
This is a recently-introduce function, which was returning
a [Name], being the names of the dfuns.  But what you really
want (obviously!) is the ClassInstances, and we have a TH type
for that.

This is an API change, so don't merge into GHC 7.0.  But it's
a new part of TH which is still settling down.

Fixes Trac #4863.

compiler/typecheck/TcSplice.lhs

index cc18707..2e81314 100644 (file)
@@ -941,7 +941,7 @@ illegalBracket = ptext (sLit "Template Haskell brackets cannot be nested (withou
 %************************************************************************
 
 \begin{code}
-lookupClassInstances :: TH.Name -> [TH.Type] -> TcM [TH.Name]
+lookupClassInstances :: TH.Name -> [TH.Type] -> TcM [TH.ClassInstance]
 lookupClassInstances c ts
    = do { loc <- getSrcSpanM
         ; case convertToHsPred loc (TH.ClassP c ts) of {
@@ -954,8 +954,7 @@ lookupClassInstances c ts
        -- Now look up instances
         ; inst_envs <- tcGetInstEnvs
         ; let (matches, unifies) = lookupInstEnv inst_envs cls tys
-              dfuns = map is_dfun (map fst matches ++ unifies)
-        ; return (map reifyName dfuns) } } }
+        ; mapM reifyClassInstance (map fst matches ++ unifies) } } }
   where
     doc = ptext (sLit "TcSplice.classInstances")
 \end{code}