@@ -17,7 +17,7 @@ import Control.Applicative
1717import Control.Lens
1818import Control.Monad
1919import Control.Monad.Fail
20- import Control.Monad.Prompt ( Prompt , prompt , runPromptM )
20+ import Control.Monad.Operational
2121import Control.Monad.State (MonadState , StateT (.. ), State , execStateT , evalState )
2222import Control.Monad.Trans.Maybe (MaybeT (.. ))
2323import Control.Monad.Writer
@@ -78,20 +78,20 @@ data Command :: Type -> Type where
7878 CRcv :: Int -> Command Int -- ^ input is current value of buffer
7979 CSnd :: Int -> Command () -- ^ input is thing being sent
8080
81- type Machine = Prompt (Memory :|: Command )
81+ type Machine = Program (Memory :|: Command )
8282
8383cRcv :: Int -> Machine Int
84- cRcv = prompt . R . CRcv
84+ cRcv = singleton . R . CRcv
8585cSnd :: Int -> Machine ()
86- cSnd = prompt . R . CSnd
86+ cSnd = singleton . R . CSnd
8787cGet :: Char -> Machine Int
88- cGet = prompt . L . MGet
88+ cGet = singleton . L . MGet
8989cSet :: Char -> Int -> Machine ()
90- cSet r = prompt . L . MSet r
90+ cSet r = singleton . L . MSet r
9191cMov :: Int -> Machine ()
92- cMov = prompt . L . MMov
92+ cMov = singleton . L . MMov
9393cPk :: Machine Op
94- cPk = prompt $ L MPk
94+ cPk = singleton $ L MPk
9595
9696data ProgState = PS { _psTape :: P. PointedList Op
9797 , _psRegs :: M. Map Char Int
@@ -164,7 +164,7 @@ interpA = \case
164164
165165day18a :: Challenge
166166day18a = show
167- . execPartA (many . runPromptM (interpMem >|< interpA) $ stepTape)
167+ . execPartA (many . interpretWithMonad (interpMem >|< interpA) $ stepTape)
168168 . (`PS ` M. empty)
169169 . parse
170170
@@ -200,12 +200,12 @@ type MultiState = V.Vector 2 Thread
200200stepThreads
201201 :: MaybeT (State MultiState ) Int
202202stepThreads = do
203- outA <- execWriterT $
204- zoom ( V. ix 0 ) . many $ runPromptM (interpMem >|< interpB) stepTape
205- outB <- execWriterT $
206- zoom ( V. ix 1 ) . many $ runPromptM (interpMem >|< interpB) stepTape
207- V. ix 0 . tBuffer <> = outB
208- V. ix 1 . tBuffer <> = outA
203+ outA <- execWriterT . zoom ( V. ix 0 ) $
204+ many $ interpretWithMonad (interpMem >|< interpB) stepTape
205+ outB <- execWriterT . zoom ( V. ix 1 ) $
206+ many $ interpretWithMonad (interpMem >|< interpB) stepTape
207+ V. ix 0 . tBuffer . = outB
208+ V. ix 1 . tBuffer . = outA
209209 guard . not $ null outA && null outB
210210 return $ length outB
211211
0 commit comments