- substs <- catMaybes `liftM` mapM (io . go cms)
- [id | AnId id <- tythings]
- mapM (io . applySubstToEnv cms . skolemSubst) substs
- return ()
- where
-
- -- Do the obtainTerm--bindSuspensions-refineIdType dance
- -- Warning! This function got a good deal of side-effects
- go :: Session -> Id -> IO (Maybe TvSubst)
+ let ids = [id | AnId id <- tythings]
+
+ -- Obtain the terms and the recovered type information
+ (terms, substs) <- unzip `liftM` mapM (go session) ids
+
+ -- Apply the substitutions obtained after recovering the types
+ modifySession session $ \hsc_env ->
+ hsc_env{hsc_IC = foldr (flip substInteractiveContext)
+ (hsc_IC hsc_env)
+ (map skolemiseSubst substs)}
+ -- Finally, print the Terms
+ unqual <- GHC.getPrintUnqual session
+ docterms <- mapM (showTerm session) terms
+ (printForUser stdout unqual . vcat)
+ (zipWith (\id docterm -> ppr id <+> char '=' <+> docterm)
+ ids
+ docterms)
+ where
+
+ -- Do the obtainTerm--bindSuspensions-computeSubstitution dance
+ go :: Session -> Id -> IO (Term, TvSubst)