name:                functor-classes-compat
version:             1
synopsis:            Data.Functor.Classes instances for core packages
description:
  "Data.Functor.Classes" instances for core packages:
  .
  * containers
  .
  * vector
  .
  * unordered-containers
homepage:            https://github.com/phadej/functor-classes-compat#readme
bug-reports:         https://github.com/phadej/functor-classes-compat/issues
license:             BSD3
license-file:        LICENSE
author:              Oleg Grenrus <oleg.grenrus@iki.fi>
maintainer:          Oleg Grenrus <oleg.grenrus@iki.fi>
copyright:           2016 Oleg Grenrus
category:            Data
build-type:          Simple
extra-source-files:  README.md
cabal-version:       >=1.10
tested-with:
  GHC==7.4.2,
  GHC==7.6.3,
  GHC==7.8.4,
  GHC==7.10.3,
  GHC==8.0.1,
  GHC==8.0.2

flag base-transformers-1
  description: Together with base-transformers-1 pick: base >= 4.9, transformers < 0.4, 0.4.*, or >= 0.5. See cabal file for precise assignments.
  manual: False
  default: True

flag base-transformers-2
  description: See base-transformers-1 flag
  manual: False
  default: True

flag vector
  description: 'vector >= 0.12'
  manual: False
  default: True

flag containers
  description: 'containers >= 0.5.9.1'
  manual: False
  default: True

flag unordered-containers
  description: 'unordered-containers >= 0.2.8.0'
  manual: False
  default: True

source-repository head
  type:     git
  location: https://github.com/phadej/functor-classes-compat

library
  exposed-modules:
    Data.Map.Functor.Classes
    Data.Set.Functor.Classes
    Data.IntMap.Functor.Classes
    Data.Vector.Functor.Classes
    Data.HashSet.Functor.Classes
    Data.HashMap.Functor.Classes
  default-language:    Haskell2010
  ghc-options: -Wall

  build-depends:  hashable >=1.0.1.1 && <1.3

  -- base and transformer dependencies:
  -- t t: base >= 4.9
  -- t f: transformers >= 0.5
  -- f t: transformers < 0.4
  -- f f: transformers == 0.4.*
  --
  -- The order is chosen so 'f f' combination is only requiring src-old
  if flag(base-transformers-1)
    if flag(base-transformers-2)
      build-depends: base         >=4.9 && <4.10
    else
      build-depends: base         >= 4.5 && <4.9,
                     transformers >= 0.5 && <0.6
  else
    if flag(base-transformers-2)
      -- we don't really care about transformers version, as long as it <0.4
      -- to make flag selection deterministic
      build-depends: base                >= 4.5 && <4.9,
                     transformers        <  0.4,
                     transformers-compat >= 0.5 && <0.6
    else
      build-depends: base                >= 4.5 && <4.9,
                     transformers        >= 0.4 && <0.5


  -- containers
  if flag(containers)
    build-depends: containers >= 0.5.9.1 && <0.6
    if flag(base-transformers-1) && flag(base-transformers-2)
        hs-source-dirs: src-none/containers
    else
      if !flag(base-transformers-1) && !flag(base-transformers-2)
        hs-source-dirs: src-implicit/containers
      else
        hs-source-dirs: src-explicit/containers
  else
    build-depends: containers >= 0.4 && <0.5.9.1
    if !flag(base-transformers-1) && !flag(base-transformers-2)
      hs-source-dirs: src-implicit/containers
    else
      hs-source-dirs: src-explicit/containers

  -- unordered-containers
  if flag(unordered-containers)
    build-depends: unordered-containers >= 0.2.8.0 && <0.3
    if flag(base-transformers-1) && flag(base-transformers-2)
        hs-source-dirs: src-none/unordered-containers
    else
      if !flag(base-transformers-1) && !flag(base-transformers-2)
        hs-source-dirs: src-implicit/unordered-containers
      else
        hs-source-dirs: src-explicit/unordered-containers
  else
    build-depends: unordered-containers >= 0.2.7.1 && <0.2.8.0
    if !flag(base-transformers-1) && !flag(base-transformers-2)
      hs-source-dirs: src-implicit/unordered-containers
    else
      hs-source-dirs: src-explicit/unordered-containers

  -- vector
  if flag(vector)
    build-depends: vector >= 0.12 && <0.13
    if flag(base-transformers-1) && flag(base-transformers-2)
        hs-source-dirs: src-none/vector
    else
      if !flag(base-transformers-1) && !flag(base-transformers-2)
        hs-source-dirs: src-implicit/vector
      else
        hs-source-dirs: src-explicit/vector
  else
    build-depends: vector >= 0.11.0.0 && <0.12
    if !flag(base-transformers-1) && !flag(base-transformers-2)
      hs-source-dirs: src-implicit/vector
    else
      hs-source-dirs: src-explicit/vector