vector-instances 3.4.1 → 3.4.2
raw patch · 8 files changed
+354/−351 lines, 8 filesdep −semigroupssetup-changed
Dependencies removed: semigroups
Files
- .gitignore +32/−32
- .vim.custom +31/−31
- CHANGELOG.markdown +31/−27
- LICENSE +30/−30
- README.markdown +15/−15
- Setup.lhs +3/−3
- src/Data/Vector/Instances.hs +157/−157
- vector-instances.cabal +55/−56
.gitignore view
@@ -1,32 +1,32 @@-dist -dist-newstyle -docs -wiki -TAGS -tags -wip -.DS_Store -.*.swp -.*.swo -*.o -*.hi -*~ -*# -.stack-work/ -cabal-dev -*.chi -*.chs.h -*.dyn_o -*.dyn_hi -.hpc -.hsenv -.cabal-sandbox/ -cabal.sandbox.config -*.prof -*.aux -*.hp -*.eventlog -cabal.project.local -cabal.project.local~ -.HTF/ -.ghc.environment.* +dist+dist-newstyle+docs+wiki+TAGS+tags+wip+.DS_Store+.*.swp+.*.swo+*.o+*.hi+*~+*#+.stack-work/+cabal-dev+*.chi+*.chs.h+*.dyn_o+*.dyn_hi+.hpc+.hsenv+.cabal-sandbox/+cabal.sandbox.config+*.prof+*.aux+*.hp+*.eventlog+cabal.project.local+cabal.project.local~+.HTF/+.ghc.environment.*
.vim.custom view
@@ -1,31 +1,31 @@-" Add the following to your .vimrc to automatically load this on startup - -" if filereadable(".vim.custom") -" so .vim.custom -" endif - -function StripTrailingWhitespace() - let myline=line(".") - let mycolumn = col(".") - silent %s/ *$// - call cursor(myline, mycolumn) -endfunction - -" enable syntax highlighting -syntax on - -" search for the tags file anywhere between here and / -set tags=TAGS;/ - -" highlight tabs and trailing spaces -set listchars=tab:‗‗,trail:‗ -set list - -" f2 runs hasktags -map <F2> :exec ":!hasktags -x -c --ignore src"<CR><CR> - -" strip trailing whitespace before saving -" au BufWritePre *.hs,*.markdown silent! cal StripTrailingWhitespace() - -" rebuild hasktags after saving -au BufWritePost *.hs silent! :exec ":!hasktags -x -c --ignore src" +" Add the following to your .vimrc to automatically load this on startup++" if filereadable(".vim.custom")+" so .vim.custom+" endif++function StripTrailingWhitespace()+ let myline=line(".")+ let mycolumn = col(".")+ silent %s/ *$//+ call cursor(myline, mycolumn)+endfunction++" enable syntax highlighting+syntax on++" search for the tags file anywhere between here and /+set tags=TAGS;/++" highlight tabs and trailing spaces+set listchars=tab:‗‗,trail:‗+set list++" f2 runs hasktags+map <F2> :exec ":!hasktags -x -c --ignore src"<CR><CR>++" strip trailing whitespace before saving+" au BufWritePre *.hs,*.markdown silent! cal StripTrailingWhitespace()++" rebuild hasktags after saving+au BufWritePost *.hs silent! :exec ":!hasktags -x -c --ignore src"
CHANGELOG.markdown view
@@ -1,27 +1,31 @@-3.4.1 [2023.04.14] ------------------- -* Add a `Hashable1 Vector` instance. -* Require `vector-0.12`+ and `hashable-1.2.5.0`+. -* Drop support for GHC 7.10 and earlier. - -3.4 ------ -* Support `vector-0.12` -* Added `Hashable` instances. - -3.3.1 ------ -* Support `vector` 0.11 - -3.3.0.1 -------- -* Support for GHC 7.10.1 - -3.3 ---- -* Added more `Semigroup` instances. - -3.2.1 ------ -* Refactored build system. -* Removed bounds on dependencies. +3.4.2 [2023.04.17]+------------------+* Remove unused dependency on `semigroups`.++3.4.1 [2023.04.14]+------------------+* Add a `Hashable1 Vector` instance.+* Require `vector-0.12`+ and `hashable-1.2.5.0`+.+* Drop support for GHC 7.10 and earlier.++3.4+-----+* Support `vector-0.12`+* Added `Hashable` instances.++3.3.1+-----+* Support `vector` 0.11++3.3.0.1+-------+* Support for GHC 7.10.1++3.3+---+* Added more `Semigroup` instances.++3.2.1+-----+* Refactored build system.+* Removed bounds on dependencies.
LICENSE view
@@ -1,30 +1,30 @@-Copyright (c)2010, Edward Kmett - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Edward Kmett nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c)2010, Edward Kmett++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Edward Kmett nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
README.markdown view
@@ -1,15 +1,15 @@-vector-instances -================ - -[](https://hackage.haskell.org/package/vector-instances) [](https://github.com/ekmett/vector-instances/actions?query=workflow%3AHaskell-CI) - -This provides a standard place for lots of orphan instances for the `vector` package. - -Contact Information -------------------- - -Contributions and bug reports are welcome! - -Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net. - --Edward Kmett +vector-instances+================++[](https://hackage.haskell.org/package/vector-instances) [](https://github.com/ekmett/vector-instances/actions?query=workflow%3AHaskell-CI)++This provides a standard place for lots of orphan instances for the `vector` package.++Contact Information+-------------------++Contributions and bug reports are welcome!++Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.++-Edward Kmett
Setup.lhs view
@@ -1,3 +1,3 @@-#!/usr/bin/env runhaskell -> import Distribution.Simple -> main = defaultMainWithHooks simpleUserHooks +#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMainWithHooks simpleUserHooks
src/Data/Vector/Instances.hs view
@@ -1,157 +1,157 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE MultiParamTypeClasses #-} ------------------------------------------------------------------------------ --- | --- Module : Data.Vector.Instances --- Copyright : (c) Edward Kmett 2010 --- License : BSD3 --- Maintainer : ekmett@gmail.com --- Stability : experimental --- Portability : portable --- ------------------------------------------------------------------------------ - -module Data.Vector.Instances () where - -import Prelude hiding ((++), drop, length) -import Control.Applicative -import Control.Monad -import Data.Semigroup -#ifdef MIN_VERSION_hashable -import Data.Hashable (Hashable(..)) -import Data.Hashable.Lifted (Hashable1(..)) -#endif -import Data.Key -import Data.Functor.Bind -import Data.Functor.Extend -import Data.Functor.Plus -import Data.Pointed -import Data.Monoid (Monoid(..)) -import qualified Data.Vector as Vector -import qualified Data.Vector.Generic as G -#if MIN_VERSION_vector(0,11,0) -import qualified Data.Vector.Fusion.Bundle as Stream -import Data.Vector.Fusion.Bundle.Size -#else -import qualified Data.Vector.Fusion.Stream as Stream -import Data.Vector.Fusion.Stream.Size -#endif -import Data.Vector (Vector,(++),drop,length,imap,ifoldr, ifoldl, izipWith,(!?),(//), generate) -import qualified Data.Vector as Vector -import qualified Data.Vector.Unboxed as Unboxed -import qualified Data.Vector.Storable as Storable -import qualified Data.Vector.Primitive as Primitive - -type instance Key Vector = Int - -instance Keyed Vector where - mapWithKey = Vector.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 = (Vector.!) - {-# 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 = Vector.ifoldr - {-# INLINE foldrWithKey #-} - foldlWithKey = Vector.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 Bind Vector where - v >>- f = Vector.concatMap f v - {-# INLINE (>>-) #-} - -instance Alt Vector where - (<!>) = (++) - {-# INLINE (<!>) #-} - -instance Plus Vector where - zero = Vector.empty - {-# INLINE zero #-} - -instance TraversableWithKey Vector where - traverseWithKey f v - = Vector.fromListN (Vector.length v) <$> traverseWithKey f (Vector.toList v) - {-# INLINE traverseWithKey #-} - -instance Extend Vector where - duplicated v = generate (length v) (`drop` v) - {-# INLINE duplicated #-} - extended f v = generate (length v) (\n -> f (drop n v)) - {-# INLINE extended #-} - -#if !(MIN_VERSION_vector(0,12,0)) -instance Semigroup (Vector a) where - (<>) = (++) - {-# INLINE (<>) #-} - -instance Unboxed.Unbox a => Semigroup (Unboxed.Vector a) where - (<>) = (Unboxed.++) - {-# INLINE (<>) #-} - -instance Storable.Storable a => Semigroup (Storable.Vector a) where - (<>) = (Storable.++) - {-# INLINE (<>) #-} - -instance Primitive.Prim a => Semigroup (Primitive.Vector a) where - (<>) = (Primitive.++) - {-# INLINE (<>) #-} -#endif - -#ifdef MIN_VERSION_hashable -instance (Hashable a) => Hashable (Vector a) where - hashWithSalt salt = hashWithSalt salt . Vector.toList - {-# INLINE hashWithSalt #-} - -instance (Unboxed.Unbox a, Hashable a) => Hashable (Unboxed.Vector a) where - hashWithSalt salt = hashWithSalt salt . Unboxed.toList - {-# INLINE hashWithSalt #-} - -instance (Storable.Storable a, Hashable a) => Hashable (Storable.Vector a) where - hashWithSalt salt = hashWithSalt salt . Storable.toList - {-# INLINE hashWithSalt #-} - -instance (Primitive.Prim a, Hashable a) => Hashable (Primitive.Vector a) where - hashWithSalt salt = hashWithSalt salt . Primitive.toList - {-# INLINE hashWithSalt #-} - -instance Hashable1 Vector where - liftHashWithSalt itemHashWithSalt salt = liftHashWithSalt itemHashWithSalt salt . Vector.toList - {-# INLINE liftHashWithSalt #-} -#endif +{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+-----------------------------------------------------------------------------+-- |+-- Module : Data.Vector.Instances+-- Copyright : (c) Edward Kmett 2010+-- License : BSD3+-- Maintainer : ekmett@gmail.com+-- Stability : experimental+-- Portability : portable+--+-----------------------------------------------------------------------------++module Data.Vector.Instances () where++import Prelude hiding ((++), drop, length)+import Control.Applicative+import Control.Monad+import Data.Semigroup+#ifdef MIN_VERSION_hashable+import Data.Hashable (Hashable(..))+import Data.Hashable.Lifted (Hashable1(..))+#endif+import Data.Key+import Data.Functor.Bind+import Data.Functor.Extend+import Data.Functor.Plus+import Data.Pointed+import Data.Monoid (Monoid(..))+import qualified Data.Vector as Vector+import qualified Data.Vector.Generic as G+#if MIN_VERSION_vector(0,11,0)+import qualified Data.Vector.Fusion.Bundle as Stream+import Data.Vector.Fusion.Bundle.Size+#else+import qualified Data.Vector.Fusion.Stream as Stream+import Data.Vector.Fusion.Stream.Size+#endif+import Data.Vector (Vector,(++),drop,length,imap,ifoldr, ifoldl, izipWith,(!?),(//), generate)+import qualified Data.Vector as Vector+import qualified Data.Vector.Unboxed as Unboxed+import qualified Data.Vector.Storable as Storable+import qualified Data.Vector.Primitive as Primitive++type instance Key Vector = Int++instance Keyed Vector where+ mapWithKey = Vector.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 = (Vector.!)+ {-# 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 = Vector.ifoldr+ {-# INLINE foldrWithKey #-}+ foldlWithKey = Vector.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 Bind Vector where+ v >>- f = Vector.concatMap f v+ {-# INLINE (>>-) #-}++instance Alt Vector where+ (<!>) = (++)+ {-# INLINE (<!>) #-}++instance Plus Vector where+ zero = Vector.empty+ {-# INLINE zero #-}++instance TraversableWithKey Vector where+ traverseWithKey f v+ = Vector.fromListN (Vector.length v) <$> traverseWithKey f (Vector.toList v)+ {-# INLINE traverseWithKey #-}++instance Extend Vector where+ duplicated v = generate (length v) (`drop` v)+ {-# INLINE duplicated #-}+ extended f v = generate (length v) (\n -> f (drop n v))+ {-# INLINE extended #-}++#if !(MIN_VERSION_vector(0,12,0))+instance Semigroup (Vector a) where+ (<>) = (++)+ {-# INLINE (<>) #-}++instance Unboxed.Unbox a => Semigroup (Unboxed.Vector a) where+ (<>) = (Unboxed.++)+ {-# INLINE (<>) #-}++instance Storable.Storable a => Semigroup (Storable.Vector a) where+ (<>) = (Storable.++)+ {-# INLINE (<>) #-}++instance Primitive.Prim a => Semigroup (Primitive.Vector a) where+ (<>) = (Primitive.++)+ {-# INLINE (<>) #-}+#endif++#ifdef MIN_VERSION_hashable+instance (Hashable a) => Hashable (Vector a) where+ hashWithSalt salt = hashWithSalt salt . Vector.toList+ {-# INLINE hashWithSalt #-}++instance (Unboxed.Unbox a, Hashable a) => Hashable (Unboxed.Vector a) where+ hashWithSalt salt = hashWithSalt salt . Unboxed.toList+ {-# INLINE hashWithSalt #-}++instance (Storable.Storable a, Hashable a) => Hashable (Storable.Vector a) where+ hashWithSalt salt = hashWithSalt salt . Storable.toList+ {-# INLINE hashWithSalt #-}++instance (Primitive.Prim a, Hashable a) => Hashable (Primitive.Vector a) where+ hashWithSalt salt = hashWithSalt salt . Primitive.toList+ {-# INLINE hashWithSalt #-}++instance Hashable1 Vector where+ liftHashWithSalt itemHashWithSalt salt = liftHashWithSalt itemHashWithSalt salt . Vector.toList+ {-# INLINE liftHashWithSalt #-}+#endif
vector-instances.cabal view
@@ -1,56 +1,55 @@-name: vector-instances -version: 3.4.1 -synopsis: Orphan Instances for 'Data.Vector' -description: Orphan Instances for 'Data.Vector'. -homepage: http://github.com/ekmett/vector-instances -bug-reports: http://github.com/ekmett/vector-instances/issues -license: BSD3 -license-file: LICENSE -author: Edward Kmett -maintainer: ekmett@gmail.com -category: Data, Data Structures -build-type: Simple -cabal-version: >=1.10 -tested-with: - GHC==8.0.2, - GHC==8.2.2, - GHC==8.4.4, - GHC==8.6.5, - GHC==8.8.4, - GHC==8.10.7, - GHC==9.0.2, - GHC==9.2.7, - GHC==9.4.4, - GHC==9.6.1 -extra-source-files: - .vim.custom - .gitignore - CHANGELOG.markdown - README.markdown - -source-repository head - type: git - location: git://github.com/ekmett/vector-instances.git - -flag hashable - description: - You can disable the use of the `hashable` package using `-f-hashable`. - default: True - manual: True - -library - default-language: Haskell2010 - other-extensions: TypeFamilies - exposed-modules: Data.Vector.Instances - hs-source-dirs: src - build-depends: - base >= 4.9 && < 5, - vector >= 0.12 && < 0.14, - semigroupoids >= 3, - semigroups >= 0.8.3.1, - comonad >= 3, - pointed >= 3, - keys >= 3 - - if flag(hashable) - build-depends: hashable >= 1.2.5.0 +name: vector-instances+version: 3.4.2+synopsis: Orphan Instances for 'Data.Vector'+description: Orphan Instances for 'Data.Vector'.+homepage: http://github.com/ekmett/vector-instances+bug-reports: http://github.com/ekmett/vector-instances/issues+license: BSD3+license-file: LICENSE+author: Edward Kmett+maintainer: ekmett@gmail.com+category: Data, Data Structures+build-type: Simple+cabal-version: >=1.10+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.7,+ GHC==9.4.4,+ GHC==9.6.1+extra-source-files:+ .vim.custom+ .gitignore+ CHANGELOG.markdown+ README.markdown++source-repository head+ type: git+ location: git://github.com/ekmett/vector-instances.git++flag hashable+ description:+ You can disable the use of the `hashable` package using `-f-hashable`.+ default: True+ manual: True++library+ default-language: Haskell2010+ other-extensions: TypeFamilies+ exposed-modules: Data.Vector.Instances+ hs-source-dirs: src+ build-depends:+ base >= 4.9 && < 5,+ vector >= 0.12 && < 0.14,+ semigroupoids >= 3,+ comonad >= 3,+ pointed >= 3,+ keys >= 3++ if flag(hashable)+ build-depends: hashable >= 1.2.5.0