vector-instances-3.4.2/0000755000000000000000000000000007346545000013200 5ustar0000000000000000vector-instances-3.4.2/.gitignore0000644000000000000000000000043007346545000015165 0ustar0000000000000000dist 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.* vector-instances-3.4.2/.vim.custom0000644000000000000000000000137707346545000015315 0ustar0000000000000000" 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 :exec ":!hasktags -x -c --ignore src" " 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" vector-instances-3.4.2/CHANGELOG.markdown0000644000000000000000000000100007346545000016222 0ustar00000000000000003.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. vector-instances-3.4.2/LICENSE0000644000000000000000000000276107346545000014213 0ustar0000000000000000Copyright (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. vector-instances-3.4.2/README.markdown0000644000000000000000000000115007346545000015676 0ustar0000000000000000vector-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 vector-instances-3.4.2/Setup.lhs0000644000000000000000000000014507346545000015010 0ustar0000000000000000#!/usr/bin/env runhaskell > import Distribution.Simple > main = defaultMainWithHooks simpleUserHooks vector-instances-3.4.2/src/Data/Vector/0000755000000000000000000000000007346545000016102 5ustar0000000000000000vector-instances-3.4.2/src/Data/Vector/Instances.hs0000644000000000000000000001057307346545000020373 0ustar0000000000000000{-# 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-3.4.2/vector-instances.cabal0000644000000000000000000000256007346545000017456 0ustar0000000000000000name: 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