It seems the formatting got mutilated, so I am posting this in proper format, again. I apologize for the spam.

Ahoy,

I have the following type class.

-- | An entity whose underlying information spans zero or more columns
class ResultEntity a where
    -- | Build an instance of @a@
    parseEntity :: RowParser a

    default parseEntity :: (EligibleDataType meta cons a) => RowParser a
    parseEntity = parseGeneric

The EligibleDataType constraint allows me to construct a RowParser with the help of generics.
It is so minimal that I am considering to transform the hole thing into this.

-- | An entity whose underlying information spans zero or more columns
class ResultEntity a where
    -- | Build an instance of @a@.
    parseEntity :: RowParser a

instance {-# OVERLAPPABLE #-} (EligibleDataType meta cons a) => ResultEntity a where
    parseEntity = parseGeneric

This makes defining new instances of ResultEntity obsolete for types that already satisfy the EligibleDataType constraint (basically everything that has a Generic instance).
And it is still possible to provide a hand-rolled instance.

Undecidable and overlapping instances seem like a big no-no. Even after reading up on them, I can't get rid of the feeling that this might be dangerous.
Is it dangerous? I am targeting GHC 8.0.1 with this.

- Ole