WIP more instances

This commit is contained in:
John Ericson 2019-03-09 15:15:19 -05:00 committed by Ken Micklas
parent 3b5649c0a2
commit 1abe4064c6
2 changed files with 15 additions and 7 deletions

View file

@ -46,12 +46,20 @@ class Monad m => MonadFreshId i m | m -> i where
default freshId :: (MonadFreshId i m', MonadTrans t, m ~ (t m')) => m i
freshId = lift freshId
newtype FreshIdT i m a = FreshIdT { runFreshIdT :: StateT i m a }
newtype FreshIdT i m a = FreshIdT { unFreshIdT :: StateT i m a }
instance MonadFreshId i m => MonadFreshId i (ReaderT r m) where
instance (Monoid w, MonadFreshId i m) => MonadFreshId i (WriterT w m) where
instance MonadFreshId i m => MonadFreshId i (ExceptT e m) where
instance MonadFreshId i m => MonadFreshId i (StateT s m) where
runFreshIdT :: Functor m => i -> FreshIdT i m a -> m a
runFreshIdT i m = fst <$> runStateT (unFreshIdT m) i
instance MonadFreshId i m => MonadFreshId i (ReaderT r m)
instance (Monoid w, MonadFreshId i m) => MonadFreshId i (WriterT w m)
instance MonadFreshId i m => MonadFreshId i (ExceptT e m)
instance MonadFreshId i m => MonadFreshId i (StateT s m)
instance (Functor m) => Functor (FreshIdT i m)
instance (Applicative m) => Applicative (FreshIdT i m)
instance (MonadRef m) => MonadRef (FreshIdT i m)
instance MonadAtomicRef m => MonadAtomicRef (FreshIdT i m)
--TODO: Eliminate the old MonadVar shims
type MonadVar m =

View file

@ -199,8 +199,8 @@ runInfer' = runExceptT
. (`runReaderT` (Set.empty, emptyScopes))
. getInfer
runInfer :: (forall s. InferT s (ST s) a) -> Either InferError a
runInfer m = runST (runInfer' m)
runInfer :: (forall s. InferT s (FreshIdT Int (ST s)) a) -> Either InferError a
runInfer m = runST (runFreshIdT 0 (runInfer' m))
inferType ::
( MonadFreshId Int m