vec-0: vec.cabal
name: vec
version: 0
synopsis: Nat, Fin and Vec types.
description:
This package provides length indexed lists, i.e. 'Vec'.
.
@
data Vec n a where
VNil :: Vec 'Nat.Z a
(:::) :: a -> Vec n a -> Vec ('Nat.S n) a
@
.
The functions are implemented in three 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
.
* __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.
.
Differences to other packages:
.
* [linear](http://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@).
.
* [sized-vector](http://hackage.haskell.org/package/sized-vector) depends
on @singletons@ package. `vec` isn't light on dependencies either,
but try to provide wide GHC support.
.
* [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: BSD3
license-file: LICENSE
author: Oleg Grenrus <oleg.grenrus@iki.fi>
maintainer: Oleg.Grenrus <oleg.grenrus@iki.fi>
copyright: (c) 2017 Oleg Grenrus
category: Data
build-type: Simple
extra-source-files: ChangeLog.md
cabal-version: >=1.10
tested-with:
GHC==7.8.4,
GHC==7.10.3,
GHC==8.0.2,
GHC==8.2.1
source-repository head
type: git
location: https://github.com/phadej/vec.git
library
exposed-modules:
Data.Vec.Lazy
Data.Vec.Lazy.Inline
Data.Vec.Pull
build-depends:
adjunctions >=4.3 && <4.4,
base >=4.7 && <4.11,
base-compat >=0.9.3 && <0.10,
boring >=0 && <0.1,
deepseq >=1.3.0.2 && <1.5,
distributive >=0.5.3 && <0.6,
fin >=0 && <0.1,
hashable >=1.2.6.1 && <1.3,
lens >=4.15.4 && <4.16,
semigroupoids >=5.2.1 && <5.3,
semigroups >=0.18.3 && <0.18.4
ghc-options: -Wall -fprint-explicit-kinds
hs-source-dirs: src
other-extensions:
CPP
FlexibleContexts
GADTs
TypeOperators
default-language: Haskell2010
test-suite inspection
type: exitcode-stdio-1.0
main-is: Inspection.hs
ghc-options: -Wall -fprint-explicit-kinds
hs-source-dirs: test
default-language: Haskell2010
build-depends:
base,
fin,
vec,
tagged,
inspection-testing >= 0.1.1.2 && <0.2
if !impl(ghc >= 8.0)
buildable: False
-- useful for development
ghc-options:
-- -dsuppress-idinfo
-- -dsuppress-coercions
-- -dsuppress-type-applications
-- -dsuppress-module-prefixes
-- -dsuppress-type-signatures
-- -dsuppress-uniques
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,
fin,
vec,
vector,
criterion >= 1.2.3.0 && <1.3