1 {-# LANGUAGE FlexibleContexts #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 {-# LANGUAGE MultiParamTypeClasses #-}
4 {-# LANGUAGE NoImplicitPrelude #-}
5 {-# LANGUAGE NoMonomorphismRestriction #-}
6 {-# LANGUAGE ScopedTypeVariables #-}
7 {-# LANGUAGE TypeFamilies #-}
10 module Data.Vector.Fixed.Boxed,
17 import qualified Algebra.Additive as Additive ( C )
18 import qualified Algebra.Ring as Ring ( C )
19 import Data.Vector.Fixed (
26 import Data.Vector.Fixed (
30 import Data.Vector.Fixed.Boxed (
36 import NumericPrelude hiding ( abs, length, foldl )
47 -- >>> import Data.Vector.Fixed (mk3)
48 -- >>> let v1 = mk3 1 2 3 :: Vec3 Int
54 (!?) :: (Vector v a) => v a -> Int -> Maybe a
56 | idx < 0 || idx >= length v1 = Nothing
57 | otherwise = Just $ v1 ! idx
60 -- | Remove an element of the given vector.
64 -- >>> import Data.Vector.Fixed (mk3)
65 -- >>> let b = mk3 1 2 3 :: Vec3 Int
66 -- >>> delete b 1 :: Vec2 Int
69 delete :: (Vector v a,
76 fromList (lhalf ++ rhalf')
78 (lhalf, rhalf) = splitAt idx (toList v1)
82 -- | We provide our own sum because sum relies on a Num instance
83 -- from the Prelude that we don't have.
87 -- >>> import Data.Vector.Fixed (mk3)
88 -- >>> let b = mk3 1 2 3 :: Vec3 Int
92 element_sum :: (Additive.C a, Ring.C a, Vector v a) => v a -> a
93 element_sum = foldl (+) (fromInteger 0)