name:          recursion-schemes
category:      Control, Recursion
version:       5.1.1.1
license:       BSD3
cabal-version: >= 1.8
license-file:  LICENSE
author:        Edward A. Kmett
maintainer:    "Samuel Gélineau" <gelisam@gmail.com>,
               "Oleg Grenrus" <oleg.grenrus@iki.fi>,
               "Ryan Scott" <ryan.gl.scott@gmail.com>
stability:     provisional
homepage:      http://github.com/ekmett/recursion-schemes/
bug-reports:   http://github.com/ekmett/recursion-schemes/issues
copyright:     Copyright (C) 2008-2015 Edward A. Kmett
synopsis:      Representing common recursion patterns as higher-order functions
description:   Many recursive functions share the same structure, e.g. pattern-match on the input and, depending on the data constructor, either recur on a smaller input or terminate the recursion with the base case. Another one: start with a seed value, use it to produce the first element of an infinite list, and recur on a modified seed in order to produce the rest of the list. Such a structure is called a recursion scheme. Using higher-order functions to implement those recursion schemes makes your code clearer, faster, and safer. See README for details.

tested-with:   GHC==7.4.2, GHC==7.6.3, GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.4, GHC==8.6.3

build-type:    Simple
extra-source-files: .travis.yml CHANGELOG.markdown .gitignore README.markdown include/recursion-schemes-common.h

source-repository head
  type: git
  location: git://github.com/ekmett/recursion-schemes.git

flag template-haskell
  description: About Template Haskell derivations
  manual: True
  default: True

library
  other-extensions:
    CPP
    TypeFamilies
    Rank2Types
    FlexibleContexts
    FlexibleInstances
    GADTs
    StandaloneDeriving
    UndecidableInstances

  hs-source-dirs: src
  include-dirs: include
  -- includes: recursion-schemes-common.h

  build-depends:
    base                 >= 4.5     && < 5,
    comonad              >= 4       && < 6,
    free                 >= 4       && < 6,
    transformers         >= 0.3.0.0 && < 1

  if !impl(ghc >= 8.2)
    build-depends: bifunctors >= 4 && < 6

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

  if impl(ghc < 7.5)
    build-depends: ghc-prim

  -- Following two conditionals aren't inverses (there are other compilers than GHC)
  --
  -- We enforce the fact that with GHC-7.10
  -- we have at least transformers-0.4.2.0 (the bundled one)
  -- which has 'Data.Functor.Classes' module. (transformers-0.3 doesn't have)
  if impl(ghc >= 7.10)
    build-depends:
      transformers         >= 0.4.2.0

  if !impl(ghc >= 7.10)
    build-depends:
      nats,
      transformers-compat  >= 0.3     && < 1

  exposed-modules:
    Data.Functor.Base
    Data.Functor.Foldable

  if flag(template-haskell)
    build-depends:
      template-haskell >= 2.5.0.0 && < 2.15,
      base-orphans     >= 0.5.4   && < 0.9,
      th-abstraction   >= 0.2.4   && < 0.3
    exposed-modules:
      Data.Functor.Foldable.TH

    other-modules:
      Paths_recursion_schemes

  ghc-options: -Wall

test-suite Expr
  type: exitcode-stdio-1.0
  main-is: Expr.hs
  hs-source-dirs: examples
  ghc-options: -Wall -threaded
  build-depends:
    base,
    HUnit <1.7,
    recursion-schemes,
    template-haskell,
    transformers     >= 0.2     && < 1
  if impl(ghc < 7.5)
    build-depends: ghc-prim