I know following types of Functors:
- Polynomial functor == simple not-nested parameterized datatype
- Generalization of 1, by using "parameter removing" newtypes:
Fix,Some(existentials), possibly some GADTs - Exponential functor ==
X -> afor fixed X - Generalization of 2 to all positive-position functions.
- Compositions of previous points
It seems like points 2,4,5 can be covered by some conditional instances, like for Data.Functor.Compose.
Question:
- Is my statement correct or I am missing something?
- Can this be formalized? In particular: what is full list on point 1 and how to fix that points 2,4,5 actually do interfere?
- Can this be described using
HFunctors?