name:                 multirec
version:              0.7.8
license:              BSD3
license-file:         LICENSE
author:               Alexey Rodriguez,
                      Stefan Holdermans,
                      Andres Löh,
                      Johan Jeuring
maintainer:           generics@haskell.org
category:             Generics
synopsis:             Generic programming for families of recursive datatypes
homepage:             http://www.cs.uu.nl/wiki/GenericProgramming/Multirec
bug-reports:          https://github.com/kosmikus/multirec/issues
description:
  Many generic programs require information about the recursive positions
  of a datatype. Examples include the generic fold, generic rewriting or
  the Zipper data structure. Several generic programming systems allow to
  write such functions by viewing datatypes as fixed points of a pattern
  functor. Traditionally, this view has been limited to so-called regular
  datatypes such as lists and binary trees. In particular, families of
  mutually recursive datatypes have been excluded.
  .
  With the multirec library, we provide a mechanism to talk about fixed
  points of families of datatypes that may be mutually recursive. On top
  of this representations, generic functions such as the fold or the Zipper
  can then be defined.
  .
  We expect that the library will be especially interesting for compiler
  writers, because ASTs are typically families of mutually recursive datatypes,
  and with multirec it becomes easy to write generic functions on ASTs.
  .
  The library is based on ideas described in the paper:
  .
  *  Alexey Rodriguez, Stefan Holdermans, Andres Löh, Johan Jeuring.
     /Generic programming with fixed points for mutually recursive datatypes/.
     ICFP 2009.

stability:            experimental
build-type:           Simple
cabal-version:        >= 1.10
tested-with:          GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2
extra-source-files:   CREDITS

source-repository head
  type:               git
  location:           https://github.com/kosmikus/multirec

library
  hs-source-dirs:     src
  -- ghc-options:        -Wall -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-matches
  exposed-modules:    Generics.MultiRec

                      -- Base
                      Generics.MultiRec.Base
                      Generics.MultiRec.Constructor
                      Generics.MultiRec.TH

                      -- Generic functions
                      Generics.MultiRec.ConNames
                      Generics.MultiRec.HFunctor
                      Generics.MultiRec.HFix
                      Generics.MultiRec.Fold
                      Generics.MultiRec.FoldK
                      Generics.MultiRec.FoldAlg
                      Generics.MultiRec.FoldAlgK
                      Generics.MultiRec.Compos
                      Generics.MultiRec.Eq
                      Generics.MultiRec.Read
                      Generics.MultiRec.Show

                      -- Extra
                      Generics.MultiRec.TEq

  default-language:   Haskell2010

  build-depends:      base >= 3.0 && < 5,
                      template-haskell >= 2.4 && < 2.13

test-suite examples
  type:               exitcode-stdio-1.0
  main-is:            All.hs
  other-modules:      AST
                      ASTExamples
                      ASTTHUse
                      ASTUse
                      GRose
                      J
                      Single
                      SingleExamples
                      SingleTHUse
                      SingleUse
                      VarTypes
  hs-source-dirs:     examples
  default-language:   Haskell2010
  build-depends:      base >= 3.0 && < 5,
                      multirec