{-| This module currently is empty. It will eventually contain monadic versions of the classes in "Control.Class.Impl.Map", but I did a reorganisation of them so the code here isn't current. There's just a bunch of commented code below which may or may not be useful when I actually implement this. -} module Control.Class.Impl.Monadic.Map where {- lookupMMArray :: (Ix i, MArray a e m) => i -> a i e -> m (Maybe e) lookupMMArray i x = do bounds <- Data.Array.MArray.getBounds x case Data.Ix.inRange bounds i of True -> Just <$> Data.Array.MArray.readArray x i False -> pure Nothing unsafeLookupMMArray :: (Ix i, MArray a e m) => i -> a i e -> m e unsafeLookupMMArray = flip Data.Array.MArray.readArray adjustMMArray :: (Ix i, MArray a e m) => (e -> e) -> i -> a i e -> m () adjustMMArray f i x = do bounds <- Data.Array.MArray.getBounds x case (Data.Ix.inRange bounds i) of True -> unsafeAdjustMMArray f i x False -> pure () unsafeAdjustMMArray :: (Ix i, MArray a e m) => (e -> e) -> i -> a i e -> m () unsafeAdjustMMArray f i x = do curVal <- Data.Array.MArray.readArray x i let newVal = f curVal Data.Array.MArray.writeArray x i newVal updateMMArray :: (Ix i, MArray a e m) => i -> e -> a i e -> m () updateMMArray i v x = do bounds <- Data.Array.MArray.getBounds x case (Data.Ix.inRange bounds i) of True -> unsafeUpdateMMArray i v x False -> pure () unsafeUpdateMMArray :: (Ix i, MArray a e m) => i -> e -> a i e -> m () unsafeUpdateMMArray i v x = Data.Array.MArray.writeArray x i v type instance Key (IOArray i _e) = i type instance Value (IOArray _i e) = e instance (Ix i, MArray IOArray e IO) => LookupMapM IO (IOArray i e) where lookupM = lookupMMArray unsafeLookupM = unsafeLookupMMArray instance (Ix i, MArray IOArray e IO) => UpdateMapM IO (IOArray i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray updateM = updateMMArray unsafeUpdateM = unsafeUpdateMMArray type instance Key (IOUArray i _e) = i type instance Value (IOUArray _i e) = e instance (Ix i, MArray IOUArray e IO) => LookupMapM IO (IOUArray i e) where lookupM = lookupMMArray instance (Ix i, MArray IOUArray e IO) => UpdateMapM IO (IOUArray i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray type instance Key (STArray _s i _e) = i type instance Value (STArray _s _i e) = e instance (Ix i, MArray (STArray s) e (Strict.ST s)) => LookupMapM (Strict.ST s) (STArray s i e) where lookupM = lookupMMArray instance (Ix i, MArray (STArray s) e (Strict.ST s)) => UpdateMapM (Strict.ST s) (STArray s i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray type instance Key (STArray _s i _e) = i type instance Value (STArray _s _i e) = e instance (Ix i, MArray (STArray s) e (Lazy.ST s)) => LookupMapM (Lazy.ST s) (STArray s i e) where lookupM = lookupMMArray instance (Ix i, MArray (STArray s) e (Lazy.ST s)) => UpdateMapM (Lazy.ST s) (STArray s i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray type instance Key (STUArray _s i _e) = i type instance Value (STUArray _s _i e) = e instance (Ix i, MArray (STUArray s) e (Strict.ST s)) => LookupMapM (Strict.ST s) (STUArray s i e) where lookupM = lookupMMArray instance (Ix i, MArray (STUArray s) e (Strict.ST s)) => UpdateMapM (Strict.ST s) (STUArray s i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray type instance Key (STUArray _s i _e) = i type instance Value (STUArray _s _i e) = e instance (Ix i, MArray (STUArray s) e (Lazy.ST s)) => LookupMapM (Lazy.ST s) (STUArray s i e) where lookupM = lookupMMArray instance (Ix i, MArray (STUArray s) e (Lazy.ST s)) => UpdateMapM (Lazy.ST s) (STUArray s i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray type instance Key (StorableArray i _e) = i type instance Value (StorableArray _i e) = e instance (Ix i, MArray StorableArray e IO) => LookupMapM IO (StorableArray i e) where lookupM = lookupMMArray instance (Ix i, MArray StorableArray e IO) => UpdateMapM IO (StorableArray i e) where adjustM = adjustMMArray unsafeAdjustM = unsafeAdjustMMArray -}