packages feed

vector-instances 3.4 → 3.4.1

raw patch · 10 files changed

+351/−431 lines, 10 filesdep ~basedep ~hashabledep ~vectorsetup-changed

Dependency ranges changed: base, hashable, vector

Files

− .ghci
@@ -1,1 +0,0 @@-:set -isrc -idist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h
.gitignore view
@@ -1,13 +1,32 @@-dist-docs-wiki-TAGS-tags-wip-.DS_Store-.*.swp-.*.swo-*.o-*.hi-*~-*#+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.*
− .travis.yml
@@ -1,112 +0,0 @@-# This file has been generated -- see https://github.com/hvr/multi-ghc-travis-language: c-sudo: false--cache:-  directories:-    - $HOME/.cabsnap-    - $HOME/.cabal/packages--before_cache:-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar--matrix:-  include:-    - env: CABALVER=1.18 GHCVER=7.0.4-      compiler: ": #GHC 7.0.4"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.0.4], sources: [hvr-ghc]}}-    - env: CABALVER=1.18 GHCVER=7.2.2-      compiler: ": #GHC 7.2.2"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.2.2], sources: [hvr-ghc]}}-    - env: CABALVER=1.18 GHCVER=7.4.2-      compiler: ": #GHC 7.4.2"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.4.2], sources: [hvr-ghc]}}-    - env: CABALVER=1.18 GHCVER=7.6.3-      compiler: ": #GHC 7.6.3"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.6.3], sources: [hvr-ghc]}}-    - env: CABALVER=1.18 GHCVER=7.8.4-      compiler: ": #GHC 7.8.4"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4], sources: [hvr-ghc]}}-    - env: CABALVER=1.22 GHCVER=7.10.3-      compiler: ": #GHC 7.10.3"-      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=8.0.2-      compiler: ": #GHC 8.0.2"-      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=8.0.2 CABALOPTS="-f-hashable"-      compiler: ": #GHC 8.0.2 -hashable"-      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2], sources: [hvr-ghc]}}-    - env: CABALVER=head GHCVER=head-      compiler: ": #GHC head"-      addons: {apt: {packages: [cabal-install-head,ghc-head], sources: [hvr-ghc]}}--  allow_failures:-    - env: CABALVER=1.18 GHCVER=7.0.4-    - env: CABALVER=1.18 GHCVER=7.2.2-    - env: CABALVER=head GHCVER=head--before_install:- - unset CC- - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH--install:- - cabal --version- - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"- - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];-   then-     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >-          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;-   fi- - travis_retry cabal update -v- - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config- - cabal install $CABALOPTS --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt- - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt--# check whether current requested install-plan matches cached package-db snapshot- - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;-   then-     echo "cabal build-cache HIT";-     rm -rfv .ghc;-     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;-     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;-   else-     echo "cabal build-cache MISS";-     rm -rf $HOME/.cabsnap;-     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;-     cabal install $CABALOPTS --only-dependencies --enable-tests --enable-benchmarks;-   fi--# snapshot package-db on cache miss- - if [ ! -d $HOME/.cabsnap ];-   then-      echo "snapshotting package-db to build-cache";-      mkdir $HOME/.cabsnap;-      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;-      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;-   fi--# Here starts the actual work to be performed for the package under test;-# any command which exits with a non-zero exit code causes the build to fail.-script:- - if [ -f configure.ac ]; then autoreconf -i; fi- - cabal configure $CABALOPTS --enable-tests --enable-benchmarks -v2  # -v2 provides useful information for debugging- - cabal build   # this builds all libraries and executables (including tests/benchmarks)- - cabal test- - cabal sdist   # tests that a source-distribution can be generated--# Check that the resulting source distribution can be built & installed.-# If there are no other `.tar.gz` files in `dist`, this can be even simpler:-# `cabal install --force-reinstalls dist/*-*.tar.gz`- - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&-   (cd dist && cabal install $CABALOPTS --force-reinstalls "$SRC_TGZ")--notifications:-  irc:-    channels:-      - "irc.freenode.org#haskell-lens"-    skip_join: true-    template:-      - "\x0313pointed\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"--# EOF
.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,21 +1,27 @@-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.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-================--[![Hackage](https://img.shields.io/hackage/v/vector-instances.svg)](https://hackage.haskell.org/package/vector-instances) [![Build Status](https://secure.travis-ci.org/ekmett/vector-instances.png?branch=master)](http://travis-ci.org/ekmett/vector-instances)--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
+================
+
+[![Hackage](https://img.shields.io/hackage/v/vector-instances.svg)](https://hackage.haskell.org/package/vector-instances) [![Build Status](https://github.com/ekmett/vector-instances/workflows/Haskell-CI/badge.svg)](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,152 +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(..))-#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 #-}-#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,53 +1,56 @@-name:                vector-instances-version:             3.4-synopsis:            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.6-tested-with:-  GHC==7.0.4,-  GHC==7.2.2,-  GHC==7.4.2,-  GHC==7.6.3,-  GHC==7.8.4,-  GHC==7.10.3,-  GHC==8.0.2-extra-source-files:-  .travis.yml-  .ghci-  .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-  other-extensions: TypeFamilies-  exposed-modules: Data.Vector.Instances-  hs-source-dirs: src-  build-depends:-    base          >= 4       && < 5,-    vector        >= 0.9     && < 0.13,-    semigroupoids >= 3,-    semigroups    >= 0.8.3.1,-    comonad       >= 3,-    pointed       >= 3,-    keys          >= 3--  if flag(hashable)-    build-depends:  hashable >= 1.1.1.0+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