Copyright | (C) 2015, Yu Fukuzawa |
---|---|
License | BSD3 |
Maintainer | minpou.primer@email.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
- data Vector m n a
- type MonadVector m = (MonadBase (BaseEff m) m, PrimMonad (BaseEff m))
- type VectorElem a = MVector (VectorEntity a) a
- type family VectorEntity a :: * -> * -> *
- class Monad m => HasVector s v m | s -> v, s -> m
- type family Item a
- type family NestedList n a
- data Size n where
- data Dim n = Dim
- dim1 :: Dim (S Z)
- dim2 :: Dim (S (S Z))
- dim3 :: Dim (S (S (S Z)))
- new :: (VectorElem a, MonadVector m, SingNat (S n)) => proxy (S n) -> m (Vector (BaseEff m) (S n) a)
- newSized :: (VectorElem a, MonadVector m) => Size (S n) -> m (Vector (BaseEff m) (S n) a)
- newSized' :: (VectorElem a, MonadVector m) => Size (S n) -> a -> m (Vector (BaseEff m) (S n) a)
- length :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m Int
- size :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m Int
- fromList :: (VectorElem a, MonadVector m, SingNat (S d)) => proxy (S d) -> NestedList (S d) a -> m (Vector (BaseEff m) (S d) a)
- toList :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m (NestedList (S n) a)
- push :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> Item (Vector (BaseEff m) (S n) a) -> m ()
- pop :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m (Item (Vector (BaseEff m) (S n) a))
- unshift :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> Item (Vector (BaseEff m) (S n) a) -> m ()
- shift :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m (Item (Vector (BaseEff m) (S n) a))
Documentation
An efficient array which has three features.
- Automatic switching unboxed and boxed arrays.
- Multi-dimension support
- Dynamically resizing
There are two basic operation exported from the Control.Imperative module.
ref
- O(1). return the element of a vector at the given index.
assign
- O(1) amortized. replace the element at the given index.
Types
PrimMonad m => Indexable (Ref m (Vector m (S (S n)) a)) | |
(VectorElem a, PrimMonad m) => Indexable (Ref m (Vector m (S Z) a)) | |
Monad m => HasVector (Ref m (Vector m n a)) (Vector m n a) m | |
PrimMonad m => Indexable (Vector m (S (S n)) a) | |
(VectorElem a, PrimMonad m) => Indexable (Vector m (S Z) a) | |
Monad m => HasVector (Vector m n a) (Vector m n a) m | |
type Element (Ref m (Vector m (S (S n)) a)) = Ref m (Vector m (S n) a) | |
type Element (Ref m (Vector m (S Z) a)) = Ref m a | |
type IndexType (Ref m (Vector m (S (S n)) a)) = Int | |
type IndexType (Ref m (Vector m (S Z) a)) = Int | |
type Element (Vector m (S (S n)) a) = Ref m (Vector m (S n) a) | |
type Element (Vector m (S Z) a) = Ref m a | |
type IndexType (Vector m (S (S n)) a) = Int | |
type IndexType (Vector m (S Z) a) = Int |
type MonadVector m = (MonadBase (BaseEff m) m, PrimMonad (BaseEff m)) Source
Useful constraint synonym for vector operations.
type VectorElem a = MVector (VectorEntity a) a Source
type family VectorEntity a :: * -> * -> * Source
type family NestedList n a Source
NestedList Z a = a | |
NestedList (S n) a = [NestedList n a] |
A sized-list type for specify the size of array.
Operations
:: (VectorElem a, MonadVector m, SingNat (S n)) | |
=> proxy (S n) | dimension |
-> m (Vector (BaseEff m) (S n) a) |
O(1). Create an empty vector.
newSized :: (VectorElem a, MonadVector m) => Size (S n) -> m (Vector (BaseEff m) (S n) a) Source
O(n). Create a vector of the given length.
newSized' :: (VectorElem a, MonadVector m) => Size (S n) -> a -> m (Vector (BaseEff m) (S n) a) Source
O(n). Create a vector filled with an initial value.
length :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m Int Source
O(1). The number of elements in the vector.
size :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m Int Source
Short alias for length
.
:: (VectorElem a, MonadVector m, SingNat (S d)) | |
=> proxy (S d) | dimension |
-> NestedList (S d) a | nested list |
-> m (Vector (BaseEff m) (S d) a) |
O(n). Build a vector from a nested list.
toList :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m (NestedList (S n) a) Source
O(n). Convert the vector to a nested list.
push :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> Item (Vector (BaseEff m) (S n) a) -> m () Source
O(1). Add a value to the rear of a vector.
pop :: (VectorElem a, HasVector s (Vector (BaseEff m) (S n) a) (BaseEff m), MonadVector m) => s -> m (Item (Vector (BaseEff m) (S n) a)) Source
O(1). Extract a value from the rear of a vector.