never executed always true always false
    1 module HelVM.HelMA.Automata.Piet.Types.InstructionMemory (
    2   logWithPosition,
    3   codelChooserIM,
    4   directionPointerIM,
    5   toggleCodelChooserIM,
    6   rotateDirectionPointerIM,
    7   initialInstructionMemory,
    8   InstructionMemory(..),
    9 ) where
   10 
   11 
   12 import           HelVM.HelMA.Automata.Piet.Types.DirectionPointer
   13 import           HelVM.HelMA.Automata.Piet.Types.InstructionCounter
   14 import           HelVM.HelMA.Automata.Piet.Types.Program
   15 
   16 import           HelVM.HelMA.Automaton.Eff.MonadEff
   17 
   18 import           Control.Monad.Logger
   19 
   20 logWithPosition :: AppEff m => Text -> InstructionMemory -> m ()
   21 logWithPosition msg im = logDebugN $ show (position $ instructionCounter im) <> " " <> msg
   22 
   23 codelChooserIM :: InstructionMemory -> DirectionPointer
   24 codelChooserIM = directionPointerIC .  instructionCounter
   25 
   26 directionPointerIM :: InstructionMemory -> DirectionPointer
   27 directionPointerIM = directionPointerIC .  instructionCounter
   28 
   29 toggleCodelChooserIM :: Int -> InstructionMemory -> InstructionMemory
   30 toggleCodelChooserIM n im = im { instructionCounter = toggleCodelChooserIC n (instructionCounter im)}
   31 
   32 rotateDirectionPointerIM :: Int -> InstructionMemory -> InstructionMemory
   33 rotateDirectionPointerIM n im = im { instructionCounter = rotateDirectionPointerIC n (instructionCounter im)}
   34 
   35 initialInstructionMemory :: Program -> InstructionMemory
   36 initialInstructionMemory prog = InstructionMemory
   37   { instructionCounter = initialInstructionCounter
   38   , program            = prog
   39   }
   40 
   41 data InstructionMemory = InstructionMemory
   42   { instructionCounter :: !InstructionCounter
   43   , program            :: !Program
   44   }