Не знаю насчёт кишок хаскеля, но как оно работает в скале или расте могу рассказать.
Причём там несколько вариантов возможно.
В целом я понимаю как оно работает, мне больше было интересно extensibility (для набора кастомных тайпклассов внутри проекта). Не хочу каждый раз писать имплементацию сам. Хочу deriving via, но чуть сложнее.