never executed always true always false
    1 module HelVM.HelMA.Automaton.Combiner.RAM
    2   ( RAM
    3   , flippedStoreChar
    4   , fromList
    5   , genericLoad
    6   , genericStore
    7   , load
    8   , store
    9   , storeChar
   10   ) where
   11 
   12 import           HelVM.HelIO.Containers.MTIndexSafe
   13 import           HelVM.HelIO.Containers.MTInsertDef
   14 
   15 import           Data.Default
   16 import           Data.MonoTraversable
   17 import           Data.Sequences
   18 import           Prelude                            hiding ( divMod, drop, fromList, splitAt, swap )
   19 
   20 genericLoad ∷ (Integral i , RAM ll element) ⇒ ll → i → element
   21 genericLoad l = load l . fromIntegral
   22 
   23 load ∷ (RAM ll element) ⇒ ll → Address → element
   24 load l i = indexMaybe l i ?: def
   25 
   26 flippedStoreChar ∷ (Num element , Integral address , RAM ll element) ⇒ address → ll → Char → ll
   27 flippedStoreChar a = flip (storeChar a)
   28 
   29 storeChar ∷ (Num element , Integral address , RAM ll element) ⇒ address → Char → ll → ll
   30 storeChar a char = genericStore a $ ord char
   31 
   32 genericStore ∷ (Integral value , Num element , Integral address , RAM ll element) ⇒ address → value → ll → ll
   33 genericStore a v = store a $ fromIntegral v
   34 
   35 store ∷ (Integral a , RAM ll element) ⇒ a → element → ll → ll
   36 store = insertDef . fromIntegral
   37 
   38 -- | Types
   39 type RAM ll element = (Default element , Element ll ~ element , Index ll ~ Int , LL ll)
   40 
   41 type LL ll = (Show ll , IsSequence ll , InsertDef ll , IndexSafe ll)
   42 
   43 type Address = Int