
On Fri, 13 Mar 2020, chessai . wrote:
Could you expound on why you try to avoid Flexible{Contexts,Instances} in your own code? That might be useful to look at here.
I also try to avoid FlexibleInstances. FlexibleInstances are sometimes a consequence of multi-parameter type classes with too many parameters. E.g. instance Convert Int a instance Convert Integer a which should be better a single-parameter type class on the first parameter. FlexibleInstances might indicate too lax instances. E.g. instance C (A a) (B a) where should be better isntance (a~b) => C (A a) (B b) where Sometimes they are a sign of non-composability. E.g. instance StringClass String where should be better instance CharClass a => StringClass [a] where or instance (a ~ Char) => StringClass [a] where depending, on what you need.