name:               functor-classes-compat
version:            1.0.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 changelog.md
cabal-version:      >=1.10
tested-with:
  GHC ==7.4.2
   || ==7.6.3
   || ==7.8.4
   || ==7.10.3
   || ==8.0.2
   || ==8.2.2
   || ==8.4.4
   || ==8.6.5
   || ==8.8.4
   || ==8.10.3

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.Sequence.Functor.Classes
    Data.Tree.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.4

  -- 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.16

    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   && <0.4
        , transformers-compat  >=0.5 && <0.7

    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.7

    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.*

    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