ac-library-hs-1.5.2.0: Data structures and algorithms
Safe HaskellNone
LanguageGHC2021

AtCoder.Extra.Vector.Prim

Description

Monadic vector functions with PrimMonad m constraints. They can fuse well.

Related issue: https://www.github.com/haskell/vector/issues/416.

Note that these functions are not 100% guaranteed to be sound.

Since: 1.5.2.0

Synopsis

Construction

Monadic initialization

replicateM :: (PrimMonad m, Vector v a) => Int -> m a -> m (v a) Source #

Constraints

  • \(n \ge 0\)

Since: 1.5.2.0

generateM :: (PrimMonad m, Vector v a) => Int -> (Int -> m a) -> m (v a) Source #

Constraints

  • \(n \ge 0\)

Since: 1.5.2.0

iterateNM :: (PrimMonad m, Vector v a) => Int -> (a -> m a) -> a -> m (v a) Source #

Constraints

  • \(n \ge 0\)

Since: 1.5.2.0

Unfolding

constructNM :: (PrimMonad m, Vector v a) => Int -> (v a -> m a) -> m (v a) Source #

Constraints

  • \(n \ge 0\)

Since: 1.5.2.0

constructrNM :: (PrimMonad m, Vector v a) => Int -> (v a -> m a) -> m (v a) Source #

Constraints

  • \(n \ge 0\)

Since: 1.5.2.0

Elementwise operations

Monadic mapping

mapM :: (PrimMonad m, Vector v a, Vector v b) => (a -> m b) -> v a -> m (v b) Source #

Since: 1.5.2.0

mapM_ :: (PrimMonad m, Vector v a) => (a -> m b) -> v a -> m () Source #

Since: 1.5.2.0

imapM :: (PrimMonad m, Vector v a, Vector v b) => (Int -> a -> m b) -> v a -> m (v b) Source #

Since: 1.5.2.0

imapM_ :: (PrimMonad m, Vector v a) => (Int -> a -> m b) -> v a -> m () Source #

Since: 1.5.2.0

forM :: (PrimMonad m, Vector v a, Vector v b) => v a -> (a -> m b) -> m (v b) Source #

Since: 1.5.2.0

forM_ :: (PrimMonad m, Vector v a) => v a -> (a -> m b) -> m () Source #

Since: 1.5.2.0

iforM :: (PrimMonad m, Vector v a, Vector v b) => v a -> (Int -> a -> m b) -> m (v b) Source #

Since: 1.5.2.0

iforM_ :: (PrimMonad m, Vector v a) => v a -> (Int -> a -> m b) -> m () Source #

Since: 1.5.2.0

Monadic zipping

zipWithM :: (PrimMonad m, Vector v a, Vector v b, Vector v c) => (a -> b -> m c) -> v a -> v b -> m (v c) Source #

Since: 1.5.2.0

zipWithM_ :: (PrimMonad m, Vector v a, Vector v b) => (a -> b -> m c) -> v a -> v b -> m () Source #

Since: 1.5.2.0

izipWithM :: (PrimMonad m, Vector v a, Vector v b, Vector v c) => (Int -> a -> b -> m c) -> v a -> v b -> m (v c) Source #

Since: 1.5.2.0

izipWithM_ :: (PrimMonad m, Vector v a, Vector v b) => (Int -> a -> b -> m c) -> v a -> v b -> m () Source #

Since: 1.5.2.0

Concat map

concatMapM :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> m (v b)) -> v a -> m (v b) Source #

Maps each element to a vector and concatenate the results.

Since: 1.5.2.0

iconcatMapM :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (Int -> a -> m (v b)) -> v a -> m (v b) Source #

Maps each element to a vector and concatenate the results.

Since: 1.5.2.0

Working with predicates

Filtering

filterM :: (PrimMonad m, Vector v a) => (a -> m Bool) -> v a -> m (v a) Source #

Since: 1.5.2.0

mapMaybeM :: (PrimMonad m, Vector v a, Vector v b) => (a -> m (Maybe b)) -> v a -> m (v b) Source #

Since: 1.5.2.0

imapMaybeM :: (PrimMonad m, Vector v a, Vector v b) => (Int -> a -> m (Maybe b)) -> v a -> m (v b) Source #

Since: 0.12.2.0

Monadic scanl

prescanlM :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

prescanlM' :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

postscanlM :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

postscanlM' :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

scanlM :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

scanlM' :: (HasCallStack, PrimMonad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a) Source #

Since: 1.5.2.0

scanl1M :: (HasCallStack, PrimMonad m, Vector v a) => (a -> a -> m a) -> v a -> m (v a) Source #

Since: 1.5.2.0

scanl1M' :: (HasCallStack, PrimMonad m, Vector v a) => (a -> a -> m a) -> v a -> m (v a) Source #

Since: 1.5.2.0