@@ -1574,13 +1574,13 @@ liftEgisonM m = EgisonM $ ErrorT $ FreshT $ do
1574
1574
fromEgisonM :: EgisonM a -> IO (Either EgisonError a )
1575
1575
fromEgisonM = modifyCounter . runEgisonM
1576
1576
1577
- counter :: IORef Int
1578
- counter = unsafePerformIO (newIORef 0 )
1577
+ counter :: IORef ( Int , Int )
1578
+ counter = unsafePerformIO (newIORef ( 0 , 0 ) )
1579
1579
1580
- readCounter :: IO Int
1580
+ readCounter :: IO ( Int , Int )
1581
1581
readCounter = readIORef counter
1582
1582
1583
- updateCounter :: Int -> IO ()
1583
+ updateCounter :: ( Int , Int ) -> IO ()
1584
1584
updateCounter = writeIORef counter
1585
1585
1586
1586
modifyCounter :: FreshT IO a -> IO a
@@ -1590,8 +1590,8 @@ modifyCounter m = do
1590
1590
updateCounter seed
1591
1591
return result
1592
1592
1593
- newtype FreshT m a = FreshT { unFreshT :: StateT Int m a }
1594
- deriving (Functor , Applicative , Monad , MonadState Int , MonadTrans , MP.MonadParallel )
1593
+ newtype FreshT m a = FreshT { unFreshT :: StateT ( Int , Int ) m a }
1594
+ deriving (Functor , Applicative , Monad , MonadState ( Int , Int ) , MonadTrans , MP. MonadParallel )
1595
1595
-- deriving (Functor, Applicative, Monad, MonadState Int, MonadTrans)
1596
1596
1597
1597
type Fresh = FreshT Identity
@@ -1600,8 +1600,8 @@ class (Applicative m, Monad m) => MonadFresh m where
1600
1600
fresh :: m String
1601
1601
1602
1602
instance (Applicative m , Monad m ) => MonadFresh (FreshT m ) where
1603
- fresh = FreshT $ do counter <- get; modify (+ 1 )
1604
- return $ " $_" ++ show counter
1603
+ fresh = FreshT $ do (x, y) <- get; modify (\ (x,y) -> (x + 1 , y) )
1604
+ return $ " $_" ++ ( show x) ++ ( show y)
1605
1605
1606
1606
instance (MonadError e m ) => MonadError e (FreshT m ) where
1607
1607
throwError = lift . throwError
@@ -1629,10 +1629,10 @@ instance MonadIO (FreshT IO) where
1629
1629
instance (MP. MonadParallel m , Error e ) => MP. MonadParallel (ErrorT e m )
1630
1630
instance (MP. MonadParallel m ) => MP. MonadParallel (StateT s m )
1631
1631
1632
- runFreshT :: Monad m => Int -> FreshT m a -> m (a , Int )
1632
+ runFreshT :: Monad m => ( Int , Int ) -> FreshT m a -> m (a , ( Int , Int ) )
1633
1633
runFreshT seed = flip (runStateT . unFreshT) seed
1634
1634
1635
- runFresh :: Int -> Fresh a -> (a , Int )
1635
+ runFresh :: ( Int , Int ) -> Fresh a -> (a , ( Int , Int ) )
1636
1636
runFresh seed m = runIdentity $ flip runStateT seed $ unFreshT m
1637
1637
1638
1638
0 commit comments