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