packages feed

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 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