X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=CoreTools.hs;h=0297f90435c02000cb7b75d0ae0b4ff9833a7484;hb=e091fb6b78ed5ea074e4c41879a712a806771ba4;hp=ed0c52d88a7e81ee6428debe2a48fc5c81a48388;hpb=ef75844d0c2bd13bedfb4debc8a917edc0560be1;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/CoreTools.hs b/CoreTools.hs index ed0c52d..0297f90 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 @@ -97,7 +98,7 @@ tfvec_len ty = where args = case Type.splitTyConApp_maybe ty of Just (tycon, args) -> args - Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty) + Nothing -> error $ "\nCoreTools.tfvec_len: Not a vector type: " ++ (pprString ty) [len, el_ty] = args -- | Get the element type of a TFVec type @@ -106,7 +107,7 @@ tfvec_elem ty = el_ty where args = case Type.splitTyConApp_maybe ty of Just (tycon, args) -> args - Nothing -> error $ "CoreTools.tfvec_len Not a vector type: " ++ (pprString ty) + Nothing -> error $ "\nCoreTools.tfvec_len: Not a vector type: " ++ (pprString ty) [len, el_ty] = args -- Is this a wild binder? @@ -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 $ "\nCoreTools.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