never executed always true always false
1 module HelVM.HelMA.Automata.Piet.Types.InstructionMemory
2 ( InstructionMemory (..)
3 , codelChooserIM
4 , directionPointerIM
5 , initialInstructionMemory
6 , instructionCounter
7 , logWithPosition
8 , program
9 , rotateDirectionPointerIM
10 , toggleCodelChooserIM
11 ) where
12
13 import HelVM.HelMA.Automata.Piet.Types.CodelChooser
14 import HelVM.HelMA.Automata.Piet.Types.DirectionPointer
15 import HelVM.HelMA.Automata.Piet.Types.InstructionCounter
16 import HelVM.HelMA.Automata.Piet.Types.Program
17
18 import HelVM.HelMA.Automaton.Eff.MonadEff
19
20 import Control.Monad.Logger
21
22 import Lens.Micro ( (%~), (^.) )
23 import Lens.Micro.TH ( makeLenses )
24
25 data InstructionMemory
26 = InstructionMemory
27 { _instructionCounter :: !InstructionCounter
28 , _program :: !Program
29 }
30
31 makeLenses ''InstructionMemory
32
33 logWithPosition ∷ AppSafeEff m ⇒ Text → InstructionMemory → m ()
34 logWithPosition msg im = logDebugN $ show (im ^. instructionCounter . position) <> " " <> msg
35
36 codelChooserIM ∷ InstructionMemory → CodelChooser
37 codelChooserIM im = codelChooserIC (im ^. instructionCounter)
38
39 directionPointerIM ∷ InstructionMemory → DirectionPointer
40 directionPointerIM im = directionPointerIC (im ^. instructionCounter)
41
42 toggleCodelChooserIM ∷ Int → InstructionMemory → InstructionMemory
43 toggleCodelChooserIM n = instructionCounter %~ toggleCodelChooserIC n
44
45 rotateDirectionPointerIM ∷ Int → InstructionMemory → InstructionMemory
46 rotateDirectionPointerIM n = instructionCounter %~ rotateDirectionPointerIC n
47
48 initialInstructionMemory ∷ Program → InstructionMemory
49 initialInstructionMemory prog = InstructionMemory
50 { _instructionCounter = initialInstructionCounter
51 , _program = prog
52 }