vector-instances-3.4/0000755000000000000000000000000013034474003013033 5ustar0000000000000000vector-instances-3.4/.ghci0000644000000000000000000000012513034474003013744 0ustar0000000000000000:set -isrc -idist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h vector-instances-3.4/CHANGELOG.markdown0000644000000000000000000000040613034474003016066 0ustar00000000000000003.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/README.markdown0000644000000000000000000000110313034474003015527 0ustar0000000000000000vector-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-3.4/Setup.lhs0000644000000000000000000000014513034474003014643 0ustar0000000000000000#!/usr/bin/env runhaskell > import Distribution.Simple > main = defaultMainWithHooks simpleUserHooks vector-instances-3.4/.vim.custom0000644000000000000000000000137713034474003015150 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/vector-instances.cabal0000644000000000000000000000243613034474003017313 0ustar0000000000000000name: 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 vector-instances-3.4/.travis.yml0000644000000000000000000001065013034474003015146 0ustar0000000000000000# 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 vector-instances-3.4/.gitignore0000644000000000000000000000010413034474003015016 0ustar0000000000000000dist docs wiki TAGS tags wip .DS_Store .*.swp .*.swo *.o *.hi *~ *# vector-instances-3.4/LICENSE0000644000000000000000000000276113034474003014046 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/src/0000755000000000000000000000000013034474003013622 5ustar0000000000000000vector-instances-3.4/src/Data/0000755000000000000000000000000013034474003014473 5ustar0000000000000000vector-instances-3.4/src/Data/Vector/0000755000000000000000000000000013034474003015735 5ustar0000000000000000vector-instances-3.4/src/Data/Vector/Instances.hs0000644000000000000000000001025213034474003020220 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(..)) #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