Real-world applications of zygohistomorphic prepromorphisms
Sharon Curtis and Shin-Cheng Mu have a Functional Pearl using zygomorphisms to find maximally dense segments (a generalization of maximum segment sums). Zygomorphisms are seemingly a good fit for sliding window problems once you are accustomed to them.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
I'd nominate the authors for extra credit as they've avoided the use of the fixed-point Mu functor.
Note, the signature of these has changed, because it was insufficiently general, and I included it (as a joke) in my recursion-schemes package.
zygoHistoPrepro
:: (Unfoldable t, Foldable t)
=> (Base t b -> b)
-> (forall c. Base t c -> Base t c)
-> (Base t (EnvT b (Stream (Base t)) a) -> a)
-> t
-> a
The implementation was simplified as well.
zygoHistoPrepro f = gprepro (distZygoT f distHisto)
And from the new implementation it should be obvious how to implement a generalized zygohistomorphic prepromorphism, by relaxing the constraint that you have a (Base t)-Branching
stream, through the use of distGHisto
instead.