-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Generic vectors with fixed length -- -- Generic vectors with fixed length. Package is structured as follows: -- --
-- cont1 $ cont2 $ construct ---- -- becomes -- --
-- create $ Cont $ cont1 . cont2 --create :: (Arity (Dim v), Vector v a) => Cont (Dim v) a -> v a -- | Wrapper for inspect. It's inlined later and is needed in order -- to give deforestation rule chance to fire. inspectV :: (Arity (Dim v), Vector v a) => v a -> Fun (Dim v) a b -> b instance RealFloat a => Vector Complex a instance Arity n => Arity (S n) instance Arity Z instance Arity n => Functor (Fun n a) -- | Type classes for array based vector. They are quite similar to ones -- from vector package but those only suitable for vectors with -- variable length. module Data.Vector.Fixed.Mutable -- | Mutable counterpart of fixed-length vector -- | Dimension for mutable vector -- | Type class for mutable vectors class Arity (DimM v) => MVector v a overlaps :: MVector v a => v s a -> v s a -> Bool copy :: (MVector v a, PrimMonad m) => v (PrimState m) a -> v (PrimState m) a -> m () move :: (MVector v a, PrimMonad m) => v (PrimState m) a -> v (PrimState m) a -> m () new :: (MVector v a, PrimMonad m) => m (v (PrimState m) a) unsafeRead :: (MVector v a, PrimMonad m) => v (PrimState m) a -> Int -> m a unsafeWrite :: (MVector v a, PrimMonad m) => v (PrimState m) a -> Int -> a -> m () -- | Length of mutable vector lengthM :: Arity (DimM v) => v s a -> Int -- | Read value at index with bound checks. read :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m a -- | Write value at index with bound checks. write :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () -- | Clone vector clone :: (PrimMonad m, MVector v a) => v (PrimState m) a -> m (v (PrimState m) a) -- | Type class for immutable vectors class (Dim v ~ DimM (Mutable v), MVector (Mutable v) a) => IVector v a unsafeFreeze :: (IVector v a, PrimMonad m) => Mutable v (PrimState m) a -> m (v a) unsafeThaw :: (IVector v a, PrimMonad m) => v a -> m (Mutable v (PrimState m) a) unsafeIndex :: IVector v a => v a -> Int -> a index :: IVector v a => v a -> Int -> a -- | Length of immutable vector lengthI :: IVector v a => v a -> Int -- | Safely convert mutable vector to immutable. freeze :: (PrimMonad m, IVector v a) => Mutable v (PrimState m) a -> m (v a) -- | Safely convert immutable vector to mutable. thaw :: (PrimMonad m, IVector v a) => v a -> m (Mutable v (PrimState m) a) -- | Generic construct constructVec :: (Arity (Dim v), IVector v a) => Fun (Dim v) a (v a) -- | Generic inspect inspectVec :: (Arity (Dim v), IVector v a) => v a -> Fun (Dim v) a b -> b -- | Generic API for vectors with fixed length. -- -- For encoding of vector size library uses Peano naturals defined in the -- library. At come point in the future it would make sense to switch to -- new GHC type level numerals. module Data.Vector.Fixed -- | Size of vector expressed as type-level natural. -- | Type level zero data Z -- | Successor of n data S n type N1 = S Z type N2 = S N1 type N3 = S N2 type N4 = S N3 type N5 = S N4 type N6 = S N5 -- | Type class for vectors with fixed length. class Arity (Dim v) => Vector v a construct :: Vector v a => Fun (Dim v) a (v a) inspect :: Vector v a => v a -> Fun (Dim v) a b -> b -- | Type class for handling n-ary functions. class Arity n -- | Newtype wrapper which is used to make Fn injective. newtype Fun n a b Fun :: (Fn n a b) -> Fun n a b -- | Length of vector. Function doesn't evaluate its argument. length :: Arity (Dim v) => v a -> Int -- | Change continuation type. convertContinuation :: Arity n => (forall v. (Dim v ~ n, Vector v a) => v a -> r) -> Fun n a r -- | Newtype wrapper for partially constructed vectors. n is number -- of uninitialized elements. -- -- Example of use: -- --
-- >>> vec $ con |> 1 |> 3 :: Complex Double -- > 1 :+ 3 --data New n v a -- | Convert fully applied constructor to vector vec :: New Z v a -> v a -- | Seed constructor con :: Vector v a => New (Dim v) v a -- | Apply another element to vector (|>) :: New (S n) v a -> a -> New n v a -- | Replicate value n times. replicate :: Vector v a => a -> v a -- | Execute monadic action for every element of vector. replicateM :: (Vector v a, Monad m) => m a -> m (v a) -- | Unit vector along Nth axis, basis :: (Vector v a, Num a) => Int -> v a -- | Generate vector. generate :: Vector v a => (Int -> a) -> v a -- | Monadic generation generateM :: (Monad m, Vector v a) => (Int -> m a) -> m (v a) -- | First element of vector. head :: (Vector v a, Dim v ~ S n) => v a -> a -- | Tail of vector. tail :: (Vector v a, Vector w a, Dim v ~ S (Dim w)) => v a -> w a -- | Continuation variant of tail. It should be used when tail of vector is -- immediately deconstructed with polymorphic function. For example -- sum . tail will fail with unhelpful error -- message because return value of tail is polymorphic. But -- tailWith sum works just fine. tailWith :: (Arity n, Vector v a, Dim v ~ S n) => (forall w. (Vector w a, Dim w ~ n) => w a -> r) -> v a -> r -- | O(n) Get vector's element at index i. (!) :: Vector v a => v a -> Int -> a -- | Map over vector map :: (Vector v a, Vector v b) => (a -> b) -> v a -> v b -- | Monadic map over vector. mapM :: (Vector v a, Vector v b, Monad m) => (a -> m b) -> v a -> m (v b) -- | Apply monadic action to each element of vector and ignore result. mapM_ :: (Vector v a, Monad m) => (a -> m b) -> v a -> m () -- | Left fold over vector foldl :: Vector v a => (b -> a -> b) -> b -> v a -> b -- | Left fold over vector foldl1 :: (Vector v a, Dim v ~ S n) => (a -> a -> a) -> v a -> a -- | Monadic fold over vector. foldM :: (Vector v a, Monad m) => (b -> a -> m b) -> b -> v a -> m b -- | Sum all elements in the vector sum :: (Vector v a, Num a) => v a -> a -- | Maximum element of vector maximum :: (Vector v a, Dim v ~ S n, Ord a) => v a -> a -- | Minimum element of vector minimum :: (Vector v a, Dim v ~ S n, Ord a) => v a -> a -- | Zip two vector together. zipWith :: (Vector v a, Vector v b, Vector v c) => (a -> b -> c) -> v a -> v b -> v c -- | Zip two vector together. izipWith :: (Vector v a, Vector v b, Vector v c) => (Int -> a -> b -> c) -> v a -> v b -> v c -- | Convert between different vector types convert :: (Vector v a, Vector w a, Dim v ~ Dim w) => v a -> w a -- | Convert vector to the list toList :: Vector v a => v a -> [a] -- | Create vector form list. List must have same length as the vector. fromList :: Vector v a => [a] -> v a -- | Vector based on the lists. Not very useful by itself but is necessary -- for implementation. newtype VecList n a VecList :: [a] -> VecList n a instance Show a => Show (VecList n a) instance Eq a => Eq (VecList n a) instance Arity n => Vector (VecList n) a -- | Boxed vector. module Data.Vector.Fixed.Boxed -- | Unboxed vector with fixed length data Vec n a type Vec2 = Vec (S (S Z)) type Vec3 = Vec (S (S (S Z))) -- | Mutable unboxed vector with fixed length data MVec n s a instance Arity n => Vector (Vec n) a instance Arity n => IVector (Vec n) a instance Arity n => MVector (MVec n) a instance (Arity n, Show a) => Show (Vec n a) -- | Unboxed vectors with fixed length. Vectors from -- Data.Vector.Fixed.Unboxed provide more flexibility at no -- performeance cost. module Data.Vector.Fixed.Primitive -- | Unboxed vector with fixed length data Vec n a type Vec2 = Vec (S (S Z)) type Vec3 = Vec (S (S (S Z))) -- | Mutable unboxed vector with fixed length data MVec n s a instance (Arity n, Prim a) => Vector (Vec n) a instance (Arity n, Prim a) => IVector (Vec n) a instance (Arity n, Prim a) => MVector (MVec n) a instance (Arity n, Prim a, Show a) => Show (Vec n a) -- | Unboxed vectors with fixed length. module Data.Vector.Fixed.Unboxed type Vec2 = Vec (S (S Z)) type Vec3 = Vec (S (S (S Z))) class (IVector (Vec n) a, MVector (MVec n) a) => Unbox n a instance (Arity n, Vector (Vec n) a, Vector (Vec n) b, Vector (Vec n) c, IVector (Vec n) a, IVector (Vec n) b, IVector (Vec n) c) => IVector (Vec n) (a, b, c) instance (Arity n, MVector (MVec n) a, MVector (MVec n) b, MVector (MVec n) c) => MVector (MVec n) (a, b, c) instance (Unbox n a, Unbox n b, Unbox n c) => Unbox n (a, b, c) instance (Arity n, IVector (Vec n) a, IVector (Vec n) b) => IVector (Vec n) (a, b) instance (Arity n, MVector (MVec n) a, MVector (MVec n) b) => MVector (MVec n) (a, b) instance (Unbox n a, Unbox n b) => Unbox n (a, b) instance (Arity n, IVector (Vec n) a) => IVector (Vec n) (Complex a) instance (Arity n, MVector (MVec n) a) => MVector (MVec n) (Complex a) instance Unbox n a => Unbox n (Complex a) instance Arity n => IVector (Vec n) Double instance Arity n => MVector (MVec n) Double instance Arity n => Unbox n Double instance Arity n => IVector (Vec n) Float instance Arity n => MVector (MVec n) Float instance Arity n => Unbox n Float instance Arity n => IVector (Vec n) Char instance Arity n => MVector (MVec n) Char instance Arity n => Unbox n Char instance Arity n => IVector (Vec n) Word64 instance Arity n => MVector (MVec n) Word64 instance Arity n => Unbox n Word64 instance Arity n => IVector (Vec n) Word32 instance Arity n => MVector (MVec n) Word32 instance Arity n => Unbox n Word32 instance Arity n => IVector (Vec n) Word16 instance Arity n => MVector (MVec n) Word16 instance Arity n => Unbox n Word16 instance Arity n => IVector (Vec n) Word8 instance Arity n => MVector (MVec n) Word8 instance Arity n => Unbox n Word8 instance Arity n => IVector (Vec n) Word instance Arity n => MVector (MVec n) Word instance Arity n => Unbox n Word instance Arity n => IVector (Vec n) Int64 instance Arity n => MVector (MVec n) Int64 instance Arity n => Unbox n Int64 instance Arity n => IVector (Vec n) Int32 instance Arity n => MVector (MVec n) Int32 instance Arity n => Unbox n Int32 instance Arity n => IVector (Vec n) Int16 instance Arity n => MVector (MVec n) Int16 instance Arity n => Unbox n Int16 instance Arity n => IVector (Vec n) Int8 instance Arity n => MVector (MVec n) Int8 instance Arity n => Unbox n Int8 instance Arity n => IVector (Vec n) Int instance Arity n => MVector (MVec n) Int instance Arity n => Unbox n Int instance Arity n => IVector (Vec n) Bool instance Arity n => MVector (MVec n) Bool instance Arity n => Unbox n Bool instance Arity n => IVector (Vec n) () instance Arity n => MVector (MVec n) () instance Arity n => Unbox n () instance Unbox n a => Vector (Vec n) a instance (Arity n, Show a, Unbox n a) => Show (Vec n a) -- | Storable-based unboxed vectors. module Data.Vector.Fixed.Storable -- | Storable-based vector with fixed length data Vec n a type Vec2 = Vec (S (S Z)) type Vec3 = Vec (S (S (S Z))) -- | Construct vector from foreign pointer. unsafeFromForeignPtr :: Storable a => ForeignPtr a -> Vec n a -- | Get underlying pointer. Data may not be modified through pointer. unsafeToForeignPtr :: Storable a => Vec n a -> ForeignPtr a unsafeWith :: Storable a => (Ptr a -> IO b) -> Vec n a -> IO b -- | Storable-based mutable vector with fixed length newtype MVec n s a MVec :: (ForeignPtr a) -> MVec n s a instance (Arity n, Storable a) => Vector (Vec n) a instance (Arity n, Storable a) => IVector (Vec n) a instance (Arity n, Storable a) => MVector (MVec n) a instance (Arity n, Storable a, Show a) => Show (Vec n a)