прям без стёба) я не понимаю что за "дефолтные реализации", в когторых так помогают трейты
Какой-нибудь интерфейс Foldable, с методами foldr, foldl, foldr1 и тд.
По они вполне себе выразимы через друг друга. Т.е. в трейте мы реализуем их друг через друга. В классе подключем трейт и переопределяем реализацию одного из них.