import Module ( moduleUserString, mkModuleName )
import TcRnMonad
import IfaceEnv ( lookupOrig )
-import Class ( Class, classBigSig )
+import Class ( Class, classExtraBigSig )
import TyCon ( TyCon, AlgTyConRhs(..), tyConTyVars, getSynTyConDefn,
- isSynTyCon, isNewTyCon, tyConDataCons, algTcRhs )
+ isSynTyCon, isNewTyCon, tyConDataCons, algTyConRhs )
import DataCon ( DataCon, dataConTyCon, dataConOrigArgTys, dataConStrictMarks,
dataConName, dataConFieldLabels, dataConWrapId, dataConIsInfix,
isVanillaDataCon )
; return (TH.TySynD (reifyName tc) (reifyTyVars tvs) rhs') }
reifyTyCon tc
- = case algTcRhs tc of
+ = case algTyConRhs tc of
NewTyCon data_con _ _
-> do { con <- reifyDataCon data_con
; return (TH.NewtypeD [] (reifyName tc) (reifyTyVars (tyConTyVars tc))
reifyClass cls
= do { cxt <- reifyCxt theta
; ops <- mapM reify_op op_stuff
- ; return (TH.ClassD cxt (reifyName cls) (reifyTyVars tvs) ops) }
+ ; return (TH.ClassD cxt (reifyName cls) (reifyTyVars tvs) fds' ops) }
where
- (tvs, theta, _, op_stuff) = classBigSig cls
+ (tvs, fds, theta, _, op_stuff) = classExtraBigSig cls
+ fds' = map reifyFunDep fds
reify_op (op, _) = do { ty <- reifyType (idType op)
; return (TH.SigD (reifyName op) ty) }
reifyTypes = mapM reifyType
reifyCxt = mapM reifyPred
+reifyFunDep :: ([TyVar], [TyVar]) -> TH.FunDep
+reifyFunDep (xs, ys) = TH.FunDep (map reifyName xs) (map reifyName ys)
+
reifyTyVars :: [TyVar] -> [TH.Name]
reifyTyVars = map reifyName