packages feed

fin-0.0.1: fin.cabal

name:                fin
version:             0.0.1
synopsis:            Nat and Fin: peano naturals and finite numbers
description:
  This package provides two simple types, and some tools to work with them.
  Also on type level as @DataKinds@.
  .
  @
  \-- Peano naturals
  data Nat = Z | S Nat
  .
  \-- Finite naturals
  data Fin (n :: Nat) where
  \    Z :: Fin ('S n)
  \    S :: Fin n -> Fin ('Nat.S n)
  @
  .
  [vec](https://hackage.haskell.org/package/vec) implements length-indexed
  (sized) lists using this package for indexes.
  .
  The "Data.Fin.Enum" module let's work generically with enumerations.
  .
  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
  .
  * [finite-typelits](https://hackage.haskell.org/package/finite-typelits)
  . Is a great package, but uses @GHC.TypeLits@.
  .
  * [type-natural](https://hackage.haskell.org/package/type-natural) depends
    on @singletons@ package. @fin@ will try to stay light on the dependencies,
    and support as many GHC versions as practical.
  .
  * [peano](https://hackage.haskell.org/package/peano) is very incomplete
  .
  * [nat](https://hackage.haskell.org/package/nat) as well.
  .
  * [PeanoWitnesses](https://hackage.haskell.org/package/PeanoWitnesses)
    doesn't use @DataKinds@.
  .
  * [type-combinators](https://hackage.haskell.org/package/type-combinators)
    is big package too.

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.2,
  GHC==8.4.1

source-repository head
  type:      git
  location:  https://github.com/phadej/vec.git

library
  exposed-modules:
    Data.Fin
    Data.Fin.Enum
    Data.Nat
    Data.Type.Nat
  build-depends:
    base     >=4.7     && <4.12,
    deepseq  >=1.3.0.2 && <1.5,
    hashable >=1.2.7.0 && <1.3

  if !impl(ghc >= 8.0)
    build-depends:
      semigroups >=0.18.4 && <0.19

  if !impl(ghc >= 7.10)
    build-depends:
       nats >=1.1.2 && <1.2,
       void >=0.7.2 && <0.8

  ghc-options:         -Wall -fprint-explicit-kinds
  hs-source-dirs:      src
  default-language:    Haskell2010

  -- dump-core
  -- if impl(ghc >= 8.0)
  --  build-depends: dump-core
  --  ghc-options: -fplugin=DumpCore -fplugin-opt DumpCore:core-html

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,
    tagged,
    inspection-testing >= 0.2.0.1 && <0.3

  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