I know following types of Functor
s:
- Polynomial functor == simple not-nested parameterized datatype
- Generalization of 1, by using "parameter removing" newtypes:
Fix
,Some
(existentials), possibly some GADTs - Exponential functor ==
X -> a
for 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
HFunctor
s?