Uniting the bifunctor and monofunctor hierarchies
With the rise of so-called bifunctor IO types, such as ZIO,
questions have naturally arisen of how one could leverage the cats-effect type classes to make use of this new power.
So far suggestions have mostly focused on duplicating the existing hierarchy into two distinct branches,
one parameterized over
F[_] and another parameterized over
To me this is not a great situation, as now library maintainers would have to write code for both of these hierarchies or choose one and leave the other one in the dust.
Instead we should find a way to unite the two shapes under a single hierarchy. This is a draft on how to enable this unification using polymorphic function types in Dotty.