module Util.Vector.Mutable where import Control.Monad (guard) import Control.Monad.Primitive import Data.Vector.Generic.Mutable as MV readMaybe :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m (Maybe a) readMaybe :: v (PrimState m) a -> Int -> m (Maybe a) readMaybe xs :: v (PrimState m) a xs k :: Int k = (a -> Maybe () -> Maybe a forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ Bool -> Maybe () forall (f :: * -> *). Alternative f => Bool -> f () guard (Int k Int -> Int -> Bool forall a. Ord a => a -> a -> Bool < v (PrimState m) a -> Int forall (v :: * -> * -> *) a s. MVector v a => v s a -> Int MV.length v (PrimState m) a xs)) (a -> Maybe a) -> m a -> m (Maybe a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> v (PrimState m) a -> Int -> m a forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m a unsafeRead v (PrimState m) a xs Int k