X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=CoreTools.hs;h=33a4a62a3ab0368e895ba5b0d39cb2776bf4a5b3;hb=fc9e13429a9f75f03ef75b91ca540c08b40083a2;hp=ed0c52d88a7e81ee6428debe2a48fc5c81a48388;hpb=ef75844d0c2bd13bedfb4debc8a917edc0560be1;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/CoreTools.hs b/CoreTools.hs index ed0c52d..33a4a62 100644 --- a/CoreTools.hs +++ b/CoreTools.hs @@ -10,6 +10,7 @@ import qualified Maybe -- GHC API import qualified GHC import qualified Type +import qualified TcType import qualified HsExpr import qualified HsTypes import qualified HsBinds @@ -164,3 +165,16 @@ has_free_vars = not . VarSet.isEmptyVarSet . CoreFVs.exprFreeVars -- simple Var CoreExprs, not complexer ones. exprToVar :: CoreSyn.CoreExpr -> Var.Id exprToVar (CoreSyn.Var id) = id +exprToVar expr = error $ "CoreTools.exprToVar Not a var: " ++ show expr + +-- Removes all the type and dictionary arguments from the given argument list, +-- leaving only the normal value arguments. The type given is the type of the +-- expression applied to this argument list. +get_val_args :: Type.Type -> [CoreSyn.CoreExpr] -> [CoreSyn.CoreExpr] +get_val_args ty args = drop n args + where + (tyvars, predtypes, _) = TcType.tcSplitSigmaTy ty + -- The first (length tyvars) arguments should be types, the next + -- (length predtypes) arguments should be dictionaries. We drop this many + -- arguments, to get at the value arguments. + n = length tyvars + length predtypes