-- ** Monad
SIMCT(..), runSIMCT,
-- *** And its context
- SIMCtx(..), emptySIMCtx, allFreeSIMCtx,
+ SIMCtx(..), emptySIMCtx, allFreeSIMCtx, ctxFromBindings
) where
import Control.Applicative (Applicative)
+import Control.Arrow (second)
-- import Control.Exception(assert)
import Control.Lens
-- import Control.Monad
allFreeSIMCtx :: [DVar] -> SIMCtx f
allFreeSIMCtx fs = SIMCtx $ M.fromList $ map (\x -> (x, VRStruct IFree)) fs
+ctxFromBindings :: [(DVar, NIX f)] -> SIMCtx f
+ctxFromBindings = SIMCtx . M.fromList . map (second VRName)
+
runSIMCT :: SIMCT m f a -> SIMCtx f -> m (Either UnifFail (a, SIMCtx f))
runSIMCT q x = runEitherT (runStateT (unSIMCT q) x)
no_unifyUnaliasedNV n1 n2 =
fmap fst $ runIdentity
- $ flip CNA.runSIMCT (CNA.allFreeSIMCtx [v])
+ $ flip CNA.runSIMCT (CNA.ctxFromBindings [(v,n1)])
$ flip runReaderT (UnifParams True False)
$ do
- _ <- FNA.unifyUnaliasedNV n1 v
_ <- FNA.unifyUnaliasedNV n2 v
FNA.expandV v
where v = "A"