Here is the first chapter on explaining implementation details in Я - effect labels. They let you define a variety of behaviour (type class instances) without involving newtype wrappers.