module GHC.Corroborate.Wrap (newUnique, newWantedCt, newGivenCt) where

import GHC.Corroborate
import GHC.TcPluginM.Extra (newGiven, newWanted)

newWantedCt :: CtLoc -> PredType -> TcPluginM Ct
newWantedCt :: CtLoc -> PredType -> TcPluginM Ct
newWantedCt CtLoc
loc = (CtEvidence -> Ct) -> TcPluginM CtEvidence -> TcPluginM Ct
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CtEvidence -> Ct
mkNonCanonical (TcPluginM CtEvidence -> TcPluginM Ct)
-> (PredType -> TcPluginM CtEvidence) -> PredType -> TcPluginM Ct
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CtLoc -> PredType -> TcPluginM CtEvidence
newWanted CtLoc
loc

newGivenCt :: CtLoc -> PredType -> EvTerm -> TcPluginM Ct
newGivenCt :: CtLoc -> PredType -> EvTerm -> TcPluginM Ct
newGivenCt CtLoc
loc PredType
prd EvTerm
ev = CtEvidence -> Ct
mkNonCanonical (CtEvidence -> Ct) -> TcPluginM CtEvidence -> TcPluginM Ct
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CtLoc -> PredType -> EvTerm -> TcPluginM CtEvidence
newGiven CtLoc
loc PredType
prd EvTerm
ev