vectoriser: fix warning
[ghc-hetmet.git] / compiler / vectorise / Vectorise / Type / PADict.hs
index 5a6867d..6c94ae0 100644 (file)
@@ -15,10 +15,15 @@ import CoreUtils
 import CoreUnfold
 import TyCon
 import Type
+import TypeRep
 import Id
 import Var
 import Name
+import Class
+import Outputable
 
+-- debug               = False
+-- dtrace s x  = if debug then pprTrace "Vectoris.Type.PADict" s x else x
 
 -- | Build the PA dictionary for some type and hoist it to top level.
 --   The PA dictionary holds fns that convert values to and from their vectorised representations.
@@ -30,18 +35,29 @@ buildPADict
        -> VM Var       -- ^ name of the top-level dictionary function.
 
 buildPADict vect_tc prepr_tc arr_tc repr
-  = polyAbstract tvs $ \args ->
-    do
+ = polyAbstract tvs $ \args ->
+ case args of
+  (_:_) -> pprPanic "Vectorise.Type.PADict.buildPADict" (text "why do we need superclass dicts?")
+  [] -> do
+      -- TODO: I'm forcing args to [] because I'm not sure why we need them.
+      --       class PA has superclass (PR (PRepr a)) but we're not using
+      --       the superclass dictionary to build the PA dictionary.
+
+      -- Get ids for each of the methods in the dictionary.
       method_ids <- mapM (method args) paMethods
 
-      pa_tc  <- builtin paTyCon
+      -- Expression to build the dictionary.
       pa_dc  <- builtin paDataCon
       let dict = mkLams (tvs ++ args)
                $ mkConApp pa_dc
                $ Type inst_ty : map (method_call args) method_ids
 
-          dfun_ty = mkForAllTys tvs
-                  $ mkFunTys (map varType args) (mkTyConApp pa_tc [inst_ty])
+      -- Build the type of the dictionary function.
+      pa_tc            <- builtin paTyCon
+      let Just pa_cls  = tyConClass_maybe pa_tc
+
+      let dfun_ty      = mkForAllTys tvs
+                       $ mkFunTys (map varType args) (PredTy $ ClassP pa_cls [inst_ty])
 
       -- Set the unfolding for the inliner.
       raw_dfun <- newExportedVar dfun_name dfun_ty
@@ -63,9 +79,9 @@ buildPADict vect_tc prepr_tc arr_tc repr
       $ do
           expr     <- build vect_tc prepr_tc arr_tc repr
           let body = mkLams (tvs ++ args) expr
-          raw_var <- newExportedVar (method_name name) (exprType body)
-          let var = raw_var
-                      `setIdUnfolding` mkInlineRule body (Just (length args))
+          raw_var  <- newExportedVar (method_name name) (exprType body)
+          let var  = raw_var
+                      `setIdUnfolding` mkInlineUnfolding (Just (length args)) body
                       `setInlinePragma` alwaysInlinePragma
           hoistBinding var body
           return var