This package provides the core functionalities of the GTA (Generate, Test, and Aggregate) programming framework on Haskell (c.f., Kento Emoto, Sebastian Fischer, Zhenjiang Hu: Generate, Test, and Aggregate - A Calculation-based Framework for Systematic Parallel Programming with MapReduce. ESOP 2012: 254-273. The authors' version is available at http://www.ipl-lab.org/~emoto/ESOP2012.pdf).

*Example*

The following code is a GTA program to solve the 0-1 Knapsack problem (http://en.wikipedia.org/wiki/Knapsack_problem). It *appears to be an exponential cost* proram in the number of input items, because it appears to generate all item selections by `subsP items`

(*Generate*), discard those with total weight heavier than the knapsack's capacity by `filterBy`

weightlimit capacity

(*Test*), and take the most valuable selection by `aggregateBy`

maxsumsolutionWith getValue

(*Aggregate*). However, it *actually runs in a linear time* owing to our proposed program transformation 'Filter-embedding Semiring Fusion' implemented in the library. In addition, it runs in *parallel* so that you can get linear speedup.

```
knapsack capacity items =
subsP items
`filterBy` weightlimit capacity
`aggregateBy` maxsumsolutionWith getValue
getValue (_, v) = v
getWeight (w, _) = w
weightlimit w = (<=w) <.> weightsum where
weightsum = homJ' times single nil
x1 `times` x2 = ( x1 + x2) `min` (w+1)
single i = getWeight i `min` (w+1)
nil = 0
```

Several examples of GTA programming are found in *examples* directory at https://bitbucket.org/emoto/gtalib/src.