+
+%************************************************************************
+%* *
+ Setting the context
+%* *
+%************************************************************************
+
+\begin{code}
+setCtFlavorLocNoEq :: CtFlavor -> TcM a -> TcM a
+setCtFlavorLocNoEq (Wanted loc) thing = setCtLoc loc thing
+setCtFlavorLocNoEq (Derived loc) thing = setCtLoc loc thing
+setCtFlavorLocNoEq (Given loc) thing = setCtLoc loc thing
+
+setCtFlavorLoc :: CtFlavor -> TcM a -> TcM a
+setCtFlavorLoc (Wanted loc) thing = setWantedLoc loc thing
+setCtFlavorLoc (Derived loc) thing = setWantedLoc loc thing
+setCtFlavorLoc (Given loc) thing = setGivenLoc loc thing
+
+setWantedLoc :: WantedLoc -> TcM a -> TcM a
+setWantedLoc loc thing_inside
+ = setCtLoc loc $
+ add_origin (ctLocOrigin loc) $
+ thing_inside
+ where
+ add_origin (TypeEqOrigin item) = addErrCtxtM (unifyCtxt item)
+ add_origin orig = addErrCtxt (ptext (sLit "At") <+> ppr orig)
+
+setGivenLoc :: GivenLoc -> TcM a -> TcM a
+setGivenLoc loc thing_inside
+ = setCtLoc loc $
+ add_origin (ctLocOrigin loc) $
+ thing_inside
+ where
+ add_origin skol = addErrCtxt (ptext (sLit "In") <+> pprSkolInfo skol)
+\end{code}