Module with basic infrastructure for function inheritance based on open rercusion.
See the work of William Cook.
We use the following terminology.
- A closed function is an ordinary function.
- A mixin function is an open function that can be inherited from, or that extends another open function.
We obtain a closed function from a base mixin
and a number of mixin extensions
en as follows:
mixin (en <@> ... <@> e1 <@> base)
Mixin identity function.
Identity for mixin composition:
mixinId <@> f == f f <@> mixinId == f