packages feed

compdata-0.2: compdata.cabal

Name:			compdata
Version:		0.2
Synopsis:            	Compositional Data Types
Description:

  Based on Wouter Swierstra's Functional Pearl /Data types à la carte/
  (Journal of Functional Programming, 18(4):423-436, 2008),
  this package provides a framework for defining recursive
  data types in a compositional manner. The fundamental idea of
  compositional data types is to separate the signature of a data type
  from the fixed point construction that produces its recursive
  structure. By allowing to compose and decompose signatures,
  /compositional data types/ enable to combine data types in a flexible
  way. The key point of Wouter Swierstra's original work is to define
  functions on /compositional data types/ in a compositional manner as
  well by leveraging Haskell's type class machinery.
  .
  Building on that foundation, this library provides additional
  extensions and (run-time) optimisations which makes compositional data types
  usable for practical implementations. In particular, it
  provides an excellent framework for manipulating and analysing
  abstract syntax trees in a type-safe manner. Thus, it is perfectly
  suited for programming language implementations, especially, in an environment
  consisting of a family of tightly interwoven /domain-specific languages/.
  .
  In concrete terms, this package provides the following features:
  .
  *  Compositional data types in the style of Wouter Swierstra's
     Functional Pearl /Data types à la carte/.
  .
  *  Modular definition of function on compositional data types through
     catamorphisms and anamorphisms as well as more structured
     recursion schemes such as primitive recursion  and co-recursion,
     and course-of-value iteration and co-iteration.
  .
  *  Support for monadic computations via monadic variants of all
     recursion schemes.
  .
  *  Support of a succinct programming style over compositional data types
     via generic programming combinators that allow various forms of
     generic transformations and generic queries.
  .
  *  Generalisation of compositional data types (terms) to
     compositional data types \"with holes\" (contexts). This allows
     flexible reuse of a wide variety of catamorphisms (called
     /term homomorphisms/) as well as an efficient composition of them.
  .
  *  Operations on signatures, for example, to add and remove
     annotations of abstract syntax trees. This includes combinators to
     propagate annotations fully automatically through certain
     term homomorphisms.
  .
  *  Optimisation of the implementation of recursion schemes. This
     includes /short-cut fusion/ style optimisation rules which yield a
     performance boost of up to factor six.
  .
  *  Automatic derivation of instances of all relevant type classes for
     using compositional data types via /Template Haskell/. This includes
     instances of 'Prelude.Eq', 'Prelude.Ord' and 'Prelude.Show' that are
     derived via instances for functorial variants of them. Additionally,
     also /smart constructors/, which allow to easily construct inhabitants
     of compositional data types, are automatically generated.
  .
  *  /Mutually recursive data types/. All of the above is also lifted to
     families of mutually recursive data types.
  .
  For examples illustrating the use of compositional data types, consult
  "Data.Comp" resp. "Data.Comp.Multi" for mutually recursive data types.

Category:            	Generics
License:		BSD3
License-file:		LICENSE
Author:			Patrick Bahr, Tom Hvitved
Maintainer:		paba@diku.dk
Build-Type:		Custom
Cabal-Version:          >=1.8.0.6

extra-source-files:
  -- test files
  testsuite/tests/Data_Test.hs,
  testsuite/tests/Data/Comp_Test.hs,
  testsuite/tests/Data/Comp/Equality_Test.hs,
  testsuite/tests/Test/Utils.hs
  -- benchmark files
  benchmark/Test.hs
  benchmark/Benchmark.hs
  benchmark/DataTypes.hs
  benchmark/Functions.hs
  benchmark/DataTypes/Comp.hs
  benchmark/DataTypes/Transform.hs
  benchmark/DataTypes/Standard.hs
  benchmark/Multi/DataTypes/Comp.hs
  benchmark/Multi/Functions/Comp/Eval.hs
  benchmark/Multi/Functions/Comp/Desugar.hs
  benchmark/Transformations.hs
  benchmark/Functions/Comp.hs
  benchmark/Functions/Comp/Eval.hs
  benchmark/Functions/Comp/Desugar.hs
  benchmark/Functions/Comp/FreeVars.hs
  benchmark/Functions/Comp/Inference.hs
  benchmark/Functions/Standard/Eval.hs
  benchmark/Functions/Standard/Desugar.hs
  benchmark/Functions/Standard/FreeVars.hs
  benchmark/Functions/Standard/Inference.hs
  benchmark/Functions/Standard.hs


flag test
  description: Build test executable.
  default:     False

flag benchmark
  description: Build benchmark executable.
  default:     False


library
  Exposed-Modules:      Data.Comp, Data.Comp.Product, Data.Comp.Sum,
                        Data.Comp.Term, Data.Comp.Algebra, Data.Comp.Equality,
                        Data.Comp.Ordering, Data.Comp.DeepSeq, Data.Comp.Generic
                        Data.Comp.TermRewriting, Data.Comp.Automata,
                        Data.Comp.Arbitrary, Data.Comp.Show, Data.Comp.Variables,
                        Data.Comp.Decompose, Data.Comp.Unification,
                        Data.Comp.Derive, Data.Comp.Matching, Data.Comp.Multi,
                        Data.Comp.Multi.Term, Data.Comp.Multi.Sum,
                        Data.Comp.Multi.Functor,
                        Data.Comp.Multi.Foldable, Data.Comp.Multi.Traversable,
                        Data.Comp.Multi.Algebra,
                        Data.Comp.Multi.Product, Data.Comp.Multi.Show,
                        Data.Comp.Multi.Equality, Data.Comp.Multi.Variables,
                        Data.Comp.Multi.Ops, Data.Comp.Ops

  Other-Modules:        Data.Comp.Derive.Utils, Data.Comp.Derive.Equality,
                        Data.Comp.Derive.Ordering, Data.Comp.Derive.Arbitrary,
                        Data.Comp.Derive.Show, Data.Comp.Derive.DeepSeq,
                        Data.Comp.Derive.SmartConstructors,
                        Data.Comp.Derive.Foldable,
                        Data.Comp.Derive.Traversable,
                        Data.Comp.Derive.Multi.Functor,
                        Data.Comp.Derive.Multi.Foldable,
                        Data.Comp.Derive.Multi.Traversable,
                        Data.Comp.Derive.Multi.Equality,
                        Data.Comp.Derive.Multi.Show,
                        Data.Comp.Derive.Multi.SmartConstructors

  Build-Depends:	base == 4.*, template-haskell, containers, mtl, QuickCheck >= 2, derive, deepseq, th-expand-syns
  hs-source-dirs:	src
  ghc-options:          -W

Executable test
  Main-is:		Data_Test.hs
  Build-Depends:	base == 4.*, template-haskell, containers, mtl, QuickCheck >= 2, test-framework, test-framework-quickcheck2, derive, th-expand-syns, deepseq
  hs-source-dirs:	src testsuite/tests
  ghc-options:          -fhpc
  if !flag(test)
    buildable:     False

Executable benchmark
  Main-is:		Benchmark.hs
  Build-Depends:	base == 4.*, template-haskell, containers, mtl, QuickCheck >= 2, derive, deepseq, criterion, random, uniplate, th-expand-syns
  hs-source-dirs:	src benchmark
  ghc-options:          -W -O2
  -- Disable short-cut fusion rules in order to compare optimised and unoptimised code.
  cpp-options:          -DNO_RULES
  if !flag(benchmark)
    buildable:     False