:: [a] -> Int -> Maybe a package:vector is:exact

O(1) Safe indexing.
O(1) Indexing in a monad. The monad allows operations to be strict in the vector when necessary. Suppose vector copying is implemented like this:
copy mv v = ... write mv i (v ! i) ...
For lazy vectors, v ! i would not be evaluated which means that mv would unnecessarily retain a reference to v in each element written. With indexM, copying can be implemented like this instead:
copy mv v = ... do
x <- indexM v i
write mv i x
Here, no references to v are retained because indexing (but not the element) is evaluated eagerly.
O(1) Indexing in a monad, without bounds checks. See indexM for an explanation of why this is useful.
O(n) Convert the first n elements of a list to a vector. It's expected that the supplied list will be exactly n elements long. As an optimization, this function allocates a buffer for n elements, which could be used for DoS-attacks by exhausting the memory if an attacker controls that parameter.
fromListN n xs = fromList (take n xs)

Examples

>>> import qualified Data.Vector as V

>>> V.fromListN 3 [1,2,3,4,5]
[1,2,3]

>>> V.fromListN 3 [1]
[1]