+ToDo:
+
+-- read value out of _immutable_ memory
+ indexCharOffAddr :: Addr -> Int -> Char
+ indexIntOffAddr :: Addr -> Int -> Int -- should we drop this?
+ indexAddrOffAddr :: Addr -> Int -> Addr
+ indexFloatOffAddr :: Addr -> Int -> Float
+ indexDoubleOffAddr :: Addr -> Int -> Double
+ indexWord8OffAddr :: Addr -> Int -> Word8
+ indexWord16OffAddr :: Addr -> Int -> Word16
+ indexWord32OffAddr :: Addr -> Int -> Word32
+ indexWord64OffAddr :: Addr -> Int -> Word64
+ indexInt8OffAddr :: Addr -> Int -> Int8
+ indexInt16OffAddr :: Addr -> Int -> Int16
+ indexInt32OffAddr :: Addr -> Int -> Int32
+ indexInt64OffAddr :: Addr -> Int -> Int64
+
+ -- read value out of mutable memory
+ readCharOffAddr :: Addr -> Int -> IO Char
+ readIntOffAddr :: Addr -> Int -> IO Int -- should we drop this?
+ readAddrOffAddr :: Addr -> Int -> IO Addr
+ readFloatOffAddr :: Addr -> Int -> IO Float
+ readDoubleOffAddr :: Addr -> Int -> IO Double
+ readWord8OffAddr :: Addr -> Int -> IO Word8
+ readWord16OffAddr :: Addr -> Int -> IO Word16
+ readWord32OffAddr :: Addr -> Int -> IO Word32
+ readWord64OffAddr :: Addr -> Int -> IO Word64
+ readInt8OffAddr :: Addr -> Int -> IO Int8
+ readInt16OffAddr :: Addr -> Int -> IO Int16
+ readInt32OffAddr :: Addr -> Int -> IO Int32
+ readInt64OffAddr :: Addr -> Int -> IO Int64