This version contains several tweaks and fixes as a result of fusing the example of game trees in John Hughes's paper Why Functional Programming Matters.
- Lists missing file in hfusion.cabal.
- Implements searching and fusing explicit compositions of hylomorphisms in expressions. E.g.
... map f (filter p (map g xs)) ...
... map f . filter p . map g ...
h = map f k = filter p ... h (k (map g xs)) ...
- Fixes fusion of
tails . mapwith
tails :: [a] -> [[a]] tails  =  tails xs@(_:xss) = xs : tails xss
- Fixed derivation of mutual hylos from definitions where each one uses a different set of names for the constant arguments.
- Fixed pretty printing of terms in the presence of infix constructors.
HFusion doesn't support specifying precedences and associativity for infix operators really.
I've tried to have the common infix operators (
(:),(+),(*),(-),(^),(++)) printed resonably, however.
- Fuses spoon-feeded compositions.