Copyright | (c) Alexey Kuleshevich 2019 |
---|---|
License | BSD3 |
Maintainer | Alexey Kuleshevich <lehins@yandex.ru> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- quicksortM_ :: (Ord e, Mutable r Ix1 e, PrimMonad m) => Scheduler m () -> MArray (PrimState m) r Ix1 e -> m ()
- unstablePartitionM :: forall r e m. (Mutable r Ix1 e, PrimMonad m) => MArray (PrimState m) r Ix1 e -> (e -> Bool) -> m Ix1
- iterateUntilM :: (Load r' ix e, Mutable r ix e, PrimMonad m, MonadIO m, PrimState m ~ RealWorld) => (Int -> Array r ix e -> MArray (PrimState m) r ix e -> m Bool) -> (Int -> Array r ix e -> Array r' ix e) -> Array r ix e -> m (Array r ix e)
Documentation
quicksortM_ :: (Ord e, Mutable r Ix1 e, PrimMonad m) => Scheduler m () -> MArray (PrimState m) r Ix1 e -> m () Source #
Mutable version of quicksort
Since: 0.3.2
Partition elements of the supplied mutable vector according to the predicate.
Example
>>>
import Data.Massiv.Array as A
>>>
import Data.Massiv.Array.Mutable.Algorithms
>>>
:set -XOverloadedLists
>>>
m <- thaw ([2,1,50,10,20,8] :: Array P Ix1 Int)
>>>
unstablePartitionM m (<= 10)
4>>>
freeze Seq m
Array P Seq (Sz1 6) [ 2, 1, 8, 10, 20, 50 ]
Since: 0.3.2
:: (Load r' ix e, Mutable r ix e, PrimMonad m, MonadIO m, PrimState m ~ RealWorld) | |
=> (Int -> Array r ix e -> MArray (PrimState m) r ix e -> m Bool) | Convergence condition. Accepts current iteration counter, pure array at previous state and a mutable at the current state, therefore after each iteration its contents can be modifed if necessary. |
-> (Int -> Array r ix e -> Array r' ix e) | A modifying function to apply at each iteration. The size of resulting array may differ if necessary. |
-> Array r ix e | Initial source array |
-> m (Array r ix e) |
Monadic version of iterateUntil
where at each iteration mutable version of an array
is available.
Since: 0.3.6