Copyright | (C) 2012-2015 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
n-D Vectors
Synopsis
- newtype V n a = V {}
- int :: Int -> TypeQ
- dim :: forall n a. Dim n => V n a -> Int
- class Dim n where
- reflectDim :: p n -> Int
- reifyDim :: Int -> (forall (n :: *). Dim n => Proxy n -> r) -> r
- reifyVector :: forall a r. Vector a -> (forall (n :: *). Dim n => V n a -> r) -> r
- reifyDimNat :: Int -> (forall (n :: Nat). KnownNat n => Proxy n -> r) -> r
- reifyVectorNat :: forall a r. Vector a -> (forall (n :: Nat). KnownNat n => V n a -> r) -> r
- fromVector :: forall n a. Dim n => Vector a -> Maybe (V n a)
- class Finite v where
- _V :: (Finite u, Finite v) => Iso (V (Size u) a) (V (Size v) b) (u a) (v b)
- _V' :: Finite v => Iso (V (Size v) a) (V (Size v) b) (v a) (v b)
Documentation
Instances
FunctorWithIndex Int (V n) Source # | |
FoldableWithIndex Int (V n) Source # | |
Defined in Linear.V | |
TraversableWithIndex Int (V n) Source # | |
Defined in Linear.V itraverse :: Applicative f => (Int -> a -> f b) -> V n a -> f (V n b) # itraversed :: IndexedTraversal Int (V n a) (V n b) a b # | |
(Dim n, Unbox a) => Vector Vector (V n a) Source # | |
Defined in Linear.V basicUnsafeFreeze :: PrimMonad m => Mutable Vector (PrimState m) (V n a) -> m (Vector (V n a)) # basicUnsafeThaw :: PrimMonad m => Vector (V n a) -> m (Mutable Vector (PrimState m) (V n a)) # basicLength :: Vector (V n a) -> Int # basicUnsafeSlice :: Int -> Int -> Vector (V n a) -> Vector (V n a) # basicUnsafeIndexM :: Monad m => Vector (V n a) -> Int -> m (V n a) # basicUnsafeCopy :: PrimMonad m => Mutable Vector (PrimState m) (V n a) -> Vector (V n a) -> m () # | |
(Dim n, Unbox a) => MVector MVector (V n a) Source # | |
Defined in Linear.V basicLength :: MVector s (V n a) -> Int # basicUnsafeSlice :: Int -> Int -> MVector s (V n a) -> MVector s (V n a) # basicOverlaps :: MVector s (V n a) -> MVector s (V n a) -> Bool # basicUnsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) (V n a)) # basicInitialize :: PrimMonad m => MVector (PrimState m) (V n a) -> m () # basicUnsafeReplicate :: PrimMonad m => Int -> V n a -> m (MVector (PrimState m) (V n a)) # basicUnsafeRead :: PrimMonad m => MVector (PrimState m) (V n a) -> Int -> m (V n a) # basicUnsafeWrite :: PrimMonad m => MVector (PrimState m) (V n a) -> Int -> V n a -> m () # basicClear :: PrimMonad m => MVector (PrimState m) (V n a) -> m () # basicSet :: PrimMonad m => MVector (PrimState m) (V n a) -> V n a -> m () # basicUnsafeCopy :: PrimMonad m => MVector (PrimState m) (V n a) -> MVector (PrimState m) (V n a) -> m () # basicUnsafeMove :: PrimMonad m => MVector (PrimState m) (V n a) -> MVector (PrimState m) (V n a) -> m () # basicUnsafeGrow :: PrimMonad m => MVector (PrimState m) (V n a) -> Int -> m (MVector (PrimState m) (V n a)) # | |
Generic1 (V n :: Type -> Type) Source # | |
Dim n => Dim (V n a :: Type) Source # | |
Dim n => Monad (V n) Source # | |
Functor (V n) Source # | |
Dim n => MonadFix (V n) Source # | |
Dim n => Applicative (V n) Source # | |
Foldable (V n) Source # | |
Defined in Linear.V fold :: Monoid m => V n m -> m # foldMap :: Monoid m => (a -> m) -> V n a -> m # foldr :: (a -> b -> b) -> b -> V n a -> b # foldr' :: (a -> b -> b) -> b -> V n a -> b # foldl :: (b -> a -> b) -> b -> V n a -> b # foldl' :: (b -> a -> b) -> b -> V n a -> b # foldr1 :: (a -> a -> a) -> V n a -> a # foldl1 :: (a -> a -> a) -> V n a -> a # elem :: Eq a => a -> V n a -> Bool # maximum :: Ord a => V n a -> a # | |
Traversable (V n) Source # | |
Dim n => Distributive (V n) Source # | |
Dim n => Representable (V n) Source # | |
Eq1 (V n) Source # | |
Ord1 (V n) Source # | |
Dim n => Read1 (V n) Source # | |
Show1 (V n) Source # | |
Dim n => MonadZip (V n) Source # | |
Dim n => Serial1 (V n) Source # | |
Defined in Linear.V serializeWith :: MonadPut m => (a -> m ()) -> V n a -> m () # deserializeWith :: MonadGet m => m a -> m (V n a) # | |
Dim n => Hashable1 (V n) Source # | |
Apply (V n) Source # | |
Bind (V n) Source # | |
Dim n => Additive (V n) Source # | |
Dim n => Metric (V n) Source # | |
Finite (V n) Source # | |
Dim n => Trace (V n) Source # | |
Dim n => Affine (V n) Source # | |
(Bounded a, Dim n) => Bounded (V n a) Source # | |
Eq a => Eq (V n a) Source # | |
(Dim n, Floating a) => Floating (V n a) Source # | |
(Dim n, Fractional a) => Fractional (V n a) Source # | |
(Typeable (V n), Typeable (V n a), Dim n, Data a) => Data (V n a) Source # | |
Defined in Linear.V gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> V n a -> c (V n a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (V n a) # dataTypeOf :: V n a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (V n a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (V n a)) # gmapT :: (forall b. Data b => b -> b) -> V n a -> V n a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> V n a -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> V n a -> r # gmapQ :: (forall d. Data d => d -> u) -> V n a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> V n a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> V n a -> m (V n a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> V n a -> m (V n a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> V n a -> m (V n a) # | |
(Dim n, Num a) => Num (V n a) Source # | |
Ord a => Ord (V n a) Source # | |
Read a => Read (V n a) Source # | |
Show a => Show (V n a) Source # | |
Generic (V n a) Source # | |
(Dim n, Semigroup a) => Semigroup (V n a) Source # | |
(Dim n, Monoid a) => Monoid (V n a) Source # | |
(Dim n, Storable a) => Storable (V n a) Source # | |
(Dim n, Binary a) => Binary (V n a) Source # | |
(Dim n, Serial a) => Serial (V n a) Source # | |
(Dim n, Serialize a) => Serialize (V n a) Source # | |
NFData a => NFData (V n a) Source # | |
Hashable a => Hashable (V n a) Source # | |
(Dim n, Unbox a) => Unbox (V n a) Source # | |
Defined in Linear.V | |
Ixed (V n a) Source # | |
(Dim n, Random a) => Random (V n a) Source # | |
(Dim n, Epsilon a) => Epsilon (V n a) Source # | |
Each (V n a) (V n b) a b Source # | |
1 <= n => Field1 (V n a) (V n a) a a Source # | |
2 <= n => Field2 (V n a) (V n a) a a Source # | |
3 <= n => Field3 (V n a) (V n a) a a Source # | |
4 <= n => Field4 (V n a) (V n a) a a Source # | |
5 <= n => Field5 (V n a) (V n a) a a Source # | |
6 <= n => Field6 (V n a) (V n a) a a Source # | |
7 <= n => Field7 (V n a) (V n a) a a Source # | |
8 <= n => Field8 (V n a) (V n a) a a Source # | |
9 <= n => Field9 (V n a) (V n a) a a Source # | |
10 <= n => Field10 (V n a) (V n a) a a Source # | |
11 <= n => Field11 (V n a) (V n a) a a Source # | |
12 <= n => Field12 (V n a) (V n a) a a Source # | |
13 <= n => Field13 (V n a) (V n a) a a Source # | |
14 <= n => Field14 (V n a) (V n a) a a Source # | |
15 <= n => Field15 (V n a) (V n a) a a Source # | |
16 <= n => Field16 (V n a) (V n a) a a Source # | |
17 <= n => Field17 (V n a) (V n a) a a Source # | |
18 <= n => Field18 (V n a) (V n a) a a Source # | |
19 <= n => Field19 (V n a) (V n a) a a Source # | |
data MVector s (V n a) Source # | |
type Rep1 (V n :: Type -> Type) Source # | |
type Rep (V n) Source # | |
type Size (V n) Source # | |
type Diff (V n) Source # | |
Defined in Linear.Affine | |
type Rep (V n a) Source # | |
data Vector (V n a) Source # | |
type Index (V n a) Source # | |
type IxValue (V n a) Source # | |
This can be used to generate a template haskell splice for a type level version of a given int
.
This does not use GHC TypeLits, instead it generates a numeric type by hand similar to the ones used in the "Functional Pearl: Implicit Configurations" paper by Oleg Kiselyov and Chung-Chieh Shan.
instance Num (Q Exp)
provided in this package allows writing $(3)
instead of $(int 3)
. Sometimes the two will produce the same
representation (if compiled without the -DUSE_TYPE_LITS
preprocessor
directive).
reflectDim :: p n -> Int Source #
reifyVectorNat :: forall a r. Vector a -> (forall (n :: Nat). KnownNat n => V n a -> r) -> r Source #
Instances
Finite Complex Source # | |
Finite V1 Source # | |
Finite V2 Source # | |
Finite V3 Source # | |
Finite V4 Source # | |
Finite V0 Source # | |
Finite Quaternion Source # | |
Defined in Linear.Quaternion type Size Quaternion :: Nat Source # toV :: Quaternion a -> V (Size Quaternion) a Source # fromV :: V (Size Quaternion) a -> Quaternion a Source # | |
Finite Plucker Source # | |
Finite f => Finite (Point f) Source # | |
Finite (V n) Source # | |