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   }