module PIL.Repr.P6Array (P6Array, create, prims) where import PIL.Native.Types import PIL.Native.Coerce import PIL.Repr.Internals import qualified Data.Seq as Seq -- Implement with skip-index later -- just a Seq for now type P6Array = TVar NativeSeq create :: Native -> STM P6Array create = newTVar . fromNative prims :: MapOf (P6Array -> ObjectPrim) prims = mkMap [ ("fetch", _fetch) , ("store", _store) , ("replace", _replace) , ("as_seq", _as_seq) ] _as_seq tvar _ = fmap toNative (readTVar tvar) _fetch tvar args = fmap (`Seq.index` (fromNative $ _0 args)) (readTVar tvar) _store tvar args = do av <- readTVar tvar writeTVar tvar (Seq.update (fromNative $ _0 args) (_1 args) av) return nil _replace tvar args = do writeTVar tvar (fromNative $ _0 args) return nil