https://research.utwente.nl/en/publications/functional-programming-with-bananas-lenses-envelopes-and-barbed-w