1 {-# LANGUAGE FlexibleContexts #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 {-# LANGUAGE MultiParamTypeClasses #-}
4 {-# LANGUAGE NoImplicitPrelude #-}
5 {-# LANGUAGE ScopedTypeVariables #-}
6 {-# LANGUAGE TypeFamilies #-}
9 module Data.Vector.Fixed.Boxed,
16 import qualified Algebra.Additive as Additive ( C )
17 import qualified Algebra.Ring as Ring ( C )
18 import Data.Vector.Fixed (
25 import qualified Data.Vector.Fixed as V (
29 import Data.Vector.Fixed.Boxed (
35 import NumericPrelude hiding ( abs )
45 -- >>> import Data.Vector.Fixed (mk3)
46 -- >>> let v1 = mk3 1 2 3 :: Vec3 Int
52 (!?) :: (Vector v a) => v a -> Int -> Maybe a
54 | idx < 0 || idx >= V.length v1 = Nothing
55 | otherwise = Just $ v1 V.! idx
58 -- | Remove an element of the given vector.
62 -- >>> import Data.Vector.Fixed (mk3)
63 -- >>> let b = mk3 1 2 3 :: Vec3 Int
64 -- >>> delete b 1 :: Vec2 Int
67 delete :: (Vector v a,
74 fromList (lhalf ++ rhalf')
76 (lhalf, rhalf) = splitAt idx (toList v1)
80 -- | We provide our own sum because V.sum relies on a Num instance
81 -- from the Prelude that we don't have.
85 -- >>> import Data.Vector.Fixed (mk3)
86 -- >>> let b = mk3 1 2 3 :: Vec3 Int
90 element_sum :: (Additive.C a, Ring.C a, Vector v a) => v a -> a
91 element_sum = V.foldl (+) (fromInteger 0)