noV :: VM a
noV = VM $ \_ _ _ -> return No
+traceNoV :: String -> SDoc -> VM a
+traceNoV s d = pprTrace s d noV
+
tryV :: VM a -> VM (Maybe a)
tryV (VM p) = VM $ \bi genv lenv ->
do
maybeV :: VM (Maybe a) -> VM a
maybeV p = maybe noV return =<< p
+traceMaybeV :: String -> SDoc -> VM (Maybe a) -> VM a
+traceMaybeV s d p = maybe (traceNoV s d) return =<< p
+
orElseV :: VM a -> VM a -> VM a
orElseV p q = maybe q return =<< tryV p
case r of
Just e -> return (Local e)
Nothing -> liftM Global
- $ maybeV (readGEnv $ \env -> lookupVarEnv (global_vars env) v)
+ $ traceMaybeV "lookupVar" (ppr v)
+ (readGEnv $ \env -> lookupVarEnv (global_vars env) v)
lookupTyCon :: TyCon -> VM (Maybe TyCon)
lookupTyCon tc
where
inst_tys' = [ty | Right ty <- inst_tys]
noFlexiVar = all isRight inst_tys
- _other -> noV
+ _other -> traceNoV "lookupInst" (ppr cls <+> ppr tys)
}
where
isRight (Left _) = False