cabal-version: 2.2 name: vec version: 0.4 synopsis: Vec: length-indexed (sized) list category: Data, Dependent Types description: This package provides length-indexed (sized) lists, also known as vectors. . @ data Vec n a where \ VNil :: Vec 'Nat.Z a \ (:::) :: a -> Vec n a -> Vec ('Nat.S n) a @ . The functions are implemented in four flavours: . * __naive__: with explicit recursion. It's simple, constraint-less, yet slow. . * __pull__: using @Fin n -> a@ representation, which fuses well, but makes some programs hard to write. And . * __data-family__: which allows lazy pattern matching . * __inline__: which exploits how GHC dictionary inlining works, unrolling recursion if the size of 'Vec' is known statically. . As best approach depends on the application, @vec@ doesn't do any magic transformation. Benchmark your code. . This package uses [fin](https://hackage.haskell.org/package/fin), i.e. not @GHC.TypeLits@, for indexes. . For @lens@ or @optics@ support see [vec-lens](https://hackage.haskell.org/package/vec-lens) and [vec-optics](https://hackage.haskell.org/package/vec-optics) packages respectively. . See [Hasochism: the pleasure and pain of dependently typed haskell programming](https://doi.org/10.1145/2503778.2503786) by Sam Lindley and Conor McBride for answers to /how/ and /why/. Read [APLicative Programming with Naperian Functors](https://doi.org/10.1007/978-3-662-54434-1_21) by Jeremy Gibbons for (not so) different ones. . === Similar packages . * [linear](https://hackage.haskell.org/package/linear) has 'V' type, which uses 'Vector' from @vector@ package as backing store. @Vec@ is a real GADT, but tries to provide as many useful instances (upto @lens@). . * [vector-sized](https://hackage.haskell.org/package/vector-sized) Great package using @GHC.TypeLits@. Current version (0.6.1.0) uses @finite-typelits@ and @Int@ indexes. . * [sized-vector](https://hackage.haskell.org/package/sized-vector) depends on @singletons@ package. @vec@ isn't light on dependencies either, but try to provide wide GHC support. . * [fixed-vector](https://hackage.haskell.org/package/fixed-vector) . * [sized](https://hackage.haskell.org/package/sized) also depends on a @singletons@ package. The @Sized f n a@ type is generalisation of @linear@'s @V@ for any @ListLike@. . * [clash-prelude](https://hackage.haskell.org/package/clash-prelude) is a kitchen sink package, which has @CLaSH.Sized.Vector@ module. Also depends on @singletons@. homepage: https://github.com/phadej/vec bug-reports: https://github.com/phadej/vec/issues license: BSD-3-Clause license-file: LICENSE author: Oleg Grenrus maintainer: Oleg.Grenrus copyright: (c) 2017-2021 Oleg Grenrus build-type: Simple extra-source-files: ChangeLog.md tested-with: GHC ==7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.4 || ==9.0.1 source-repository head type: git location: https://github.com/phadej/vec.git subdir: vec flag adjunctions description: Depend on @adjunctions@ to provide its instances manual: True default: True flag distributive description: Depend on @distributive@ to provide its instances. Turning on, disables @adjunctions@ too. manual: True default: True flag semigroupoids description: Depend on @semigroupoids@ to provide its instances, and `traverse1`. manual: True default: True library default-language: Haskell2010 ghc-options: -Wall -fprint-explicit-kinds hs-source-dirs: src exposed-modules: Data.Vec.DataFamily.SpineStrict Data.Vec.DataFamily.SpineStrict.Pigeonhole Data.Vec.Lazy Data.Vec.Lazy.Inline Data.Vec.Pull other-modules: Control.Lens.Yocto Data.Functor.Confusing -- GHC boot libs build-depends: , base >=4.7 && <4.16 , deepseq >=1.3.0.1 && <1.5 , transformers >=0.3.0.0 && <0.6 if !impl(ghc >=8.0) build-depends: semigroups >=0.18.4 && <0.20 -- Ensure Data.Functor.Classes is always available if impl(ghc >= 7.10) build-depends: transformers >= 0.4.2.0 else build-depends: transformers-compat ^>=0.6.5 -- siblings build-depends: fin ^>=0.2 -- other dependencies build-depends: , hashable >=1.2.7.0 && <1.4 , indexed-traversable ^>=0.1.1 , QuickCheck ^>=2.14.2 if flag(distributive) build-depends: distributive >=0.5.3 && <0.7 if flag(adjunctions) build-depends: adjunctions ^>=4.4 if flag(semigroupoids) build-depends: semigroupoids >=5.3.5 && <5.4 other-extensions: CPP FlexibleContexts GADTs TypeOperators if impl(ghc >=9.0) -- these flags may abort compilation with GHC-8.10 -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295 ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode x-docspec-extra-packages: void x-docspec-extra-packages: lens test-suite inspection type: exitcode-stdio-1.0 main-is: Main.hs other-modules: Inspection Inspection.DataFamily.SpineStrict Inspection.DataFamily.SpineStrict.Pigeonhole ghc-options: -Wall -fprint-explicit-kinds hs-source-dirs: test default-language: Haskell2010 build-depends: , base , base-compat , fin , inspection-testing ^>=0.4.2.2 , tagged , vec if !impl(ghc >=8.0) buildable: False benchmark bench type: exitcode-stdio-1.0 main-is: Bench.hs ghc-options: -Wall -fprint-explicit-kinds hs-source-dirs: bench default-language: Haskell2010 other-modules: DotProduct build-depends: , base , criterion >=1.4.0.0 && <1.6 , fin , vec , vector