Sometimes a function’s type class context grows so big that you would like to group the various type class constraints together and give it a sensible name, especially if that big context is used many times in your module. Consider for example the fold function from module Generics.MultiRec.FoldAlgK: fold :: (Fam phi, HFunctor phi (PF phi), Fold (PF phi)) => Algebra phi r -> phi ix -> ix -> r Cont