vector-instances 0.0.2.1 → 0.1.0
raw patch · 2 files changed
+136/−41 lines, 2 filesdep +comonaddep +keysdep +pointeddep ~vectorPVP ok
version bump matches the API change (PVP)
Dependencies added: comonad, keys, pointed, semigroupoids, semigroups
Dependency ranges changed: vector
API changes (from Hackage documentation)
+ Data.Vector.Instances: instance Adjustable Vector
+ Data.Vector.Instances: instance Alt Vector
+ Data.Vector.Instances: instance Apply Vector
+ Data.Vector.Instances: instance Bind Vector
+ Data.Vector.Instances: instance Extend Vector
+ Data.Vector.Instances: instance FoldableWithKey Vector
+ Data.Vector.Instances: instance Indexable Vector
+ Data.Vector.Instances: instance Keyed Vector
+ Data.Vector.Instances: instance Lookup Vector
+ Data.Vector.Instances: instance Plus Vector
+ Data.Vector.Instances: instance Pointed Vector
+ Data.Vector.Instances: instance Semigroup (Vector a)
+ Data.Vector.Instances: instance TraversableWithKey Vector
+ Data.Vector.Instances: instance Zip Vector
+ Data.Vector.Instances: instance ZipWithKey Vector
Files
- Data/Vector/Instances.hs +126/−39
- vector-instances.cabal +10/−2
Data/Vector/Instances.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE TypeFamilies #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Vector.Instances@@ -11,64 +12,150 @@ module Data.Vector.Instances () where -import Prelude hiding ((++))+import Prelude hiding ((++), drop, length) import Control.Applicative import Control.Monad+import Data.Semigroup+import Data.Key+import Data.Functor.Bind+import Data.Functor.Extend+import Data.Functor.Plus import Data.Foldable (Foldable(..)) import Data.Traversable (Traversable(..))+import Data.Pointed import Data.Monoid import qualified Data.Vector as Vector import qualified Data.Vector.Generic as G import qualified Data.Vector.Fusion.Stream as Stream import Data.Vector.Fusion.Stream.Size-import Data.Vector (Vector, (++))+import Data.Vector (Vector,(++),drop,length,imap,ifoldr, ifoldl, izipWith,(!?),(//), generate)+import qualified Data.Vector as Vector instance Functor Vector where- fmap = Vector.map- {-# INLINE fmap #-}+ fmap = Vector.map+ {-# INLINE fmap #-} +type instance Key Vector = Int++instance Keyed Vector where+ mapWithKey = imap+ {-# INLINE mapWithKey #-}++instance Zip Vector where+ zipWith = Vector.zipWith+ {-# INLINE zipWith #-}++instance ZipWithKey Vector where+ zipWithKey = Vector.izipWith+ {-# INLINE zipWithKey #-}++instance Indexable Vector where+ index = (!)+ {-# INLINE index #-}++instance Lookup Vector where+ lookup = flip (!?) + {-# INLINE lookup #-}++instance Adjustable Vector where+ adjust f n v = case v !? n of+ Just a -> v // [(n, f a)]+ Nothing -> v+ {-# INLINE adjust #-}++ replace n a v = v // [(n,a)]+ {-# INLINE replace #-}++instance FoldableWithKey Vector where+ foldrWithKey = ifoldr+ {-# INLINE foldrWithKey #-}+ foldlWithKey = ifoldl+ {-# INLINE foldlWithKey #-}++instance Apply Vector where+ fs <.> as =+ G.unstream $ Stream.sized results (Exact n)+ where+ n = Vector.length fs * Vector.length as+ results = Stream.concatMap body $ G.stream fs+ body f = Stream.map f $ G.stream as+ {-# INLINE (<.>) #-}++instance Pointed Vector where+ point = Vector.singleton+ {-# INLINE point #-}++instance Applicative Vector where+ pure = Vector.singleton+ {-# INLINE pure #-}+ fs <*> as =+ G.unstream $ Stream.sized results (Exact n)+ where+ n = Vector.length fs * Vector.length as+ results = Stream.concatMap body $ G.stream fs+ body f = Stream.map f $ G.stream as+ {-# INLINE (<*>) #-}++instance Bind Vector where+ v >>- f = Vector.concatMap f v+ {-# INLINE (>>-) #-}++instance Semigroup (Vector a) where+ (<>) = (++)+ {-# INLINE (<>) #-}+ instance Monad Vector where- return = Vector.singleton- {-# INLINE return #-}- v >>= f = Vector.concatMap f v- {-# INLINE (>>=) #-}- fail _ = Vector.empty- {-# INLINE fail #-}+ return = Vector.singleton+ {-# INLINE return #-}+ v >>= f = Vector.concatMap f v+ {-# INLINE (>>=) #-}+ fail _ = Vector.empty+ {-# INLINE fail #-} instance MonadPlus Vector where- mzero = Vector.empty- {-# INLINE mzero #-}- mplus = (++)- {-# INLINE mplus #-}+ mzero = Vector.empty+ {-# INLINE mzero #-}+ mplus = (++)+ {-# INLINE mplus #-} -instance Applicative Vector where- pure = Vector.singleton- {-# INLINE pure #-}- fs <*> as =- G.unstream $ Stream.sized results (Exact n)- where- n = Vector.length fs * Vector.length as- results = Stream.concatMap body $ G.stream fs- body f = Stream.map f $ G.stream as- {-# INLINE (<*>) #-}+instance Alt Vector where+ (<!>) = (++)+ {-# INLINE (<!>) #-} +instance Plus Vector where+ zero = Vector.empty+ {-# INLINE zero #-}+ instance Alternative Vector where- (<|>) = (++)- {-# INLINE (<|>) #-}- empty = Vector.empty- {-# INLINE empty #-}+ (<|>) = (++)+ {-# INLINE (<|>) #-}+ empty = Vector.empty+ {-# INLINE empty #-} instance Foldable Vector where- foldl = Vector.foldl- {-# INLINE foldl #-}- foldr = Vector.foldr- {-# INLINE foldr #-}- foldl1 = Vector.foldl1- {-# INLINE foldl1 #-}- foldr1 = Vector.foldr1- {-# INLINE foldr1 #-}+ foldl = Vector.foldl+ {-# INLINE foldl #-}+ foldr = Vector.foldr+ {-# INLINE foldr #-}+ foldl1 = Vector.foldl1+ {-# INLINE foldl1 #-}+ foldr1 = Vector.foldr1+ {-# INLINE foldr1 #-} instance Traversable Vector where- traverse f v- = Vector.fromListN (Vector.length v) <$> traverse f (Vector.toList v)- {-# INLINE traverse #-}+ traverse f v+ = Vector.fromListN (Vector.length v) <$> traverse f (Vector.toList v)+ {-# INLINE traverse #-}++instance TraversableWithKey Vector where+ traverseWithKey f v+ = Vector.fromListN (Vector.length v) <$> traverseWithKey f (Vector.toList v)+ {-# INLINE traverseWithKey #-}++instance Extend Vector where+ duplicate v = generate (length v) (`drop` v)+ {-# INLINE duplicate #-}+ extend f v = generate (length v) (\n -> f (drop n v))+ {-# INLINE extend #-}++
vector-instances.cabal view
@@ -1,5 +1,5 @@ name: vector-instances-version: 0.0.2.1+version: 0.1.0 synopsis: Orphan Instances for 'Data.Vector' homepage: http://github.com/ekmett/vector-instances license: BSD3@@ -15,9 +15,17 @@ location: git://github.com/ekmett/vector-instances.git library+ other-extensions:+ TypeFamilies + exposed-modules: Data.Vector.Instances build-depends: base >= 4 && < 5,- vector >= 0.7.1 && < 8+ vector >= 0.7 && < 8,+ semigroupoids >= 1.2.2 && < 1.3,+ semigroups >= 0.5 && < 0.6,+ comonad >= 1.1 && < 1.2,+ pointed >= 1.8 && < 1.9,+ keys >= 1.8 && < 1.9