packages feed

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