грубо говоря, у тебя есть некий ивент аналитики, у которого есть поля, по которым его можно идентифицировать на принимающей стороне (в аппметрике, гугл аналитике и т.д.) и полезная нагрузка, и.е. действительный контент ивента
если пытаться некоторые части абстрагировать и переиспользовать датаклассами, то на самом деле ничего там не абстрагируется и не переиспользуется, потому что нет generic пути собрать все вложенные датаклассы и положить всё в мапку, которая отправляется в аналитику
Но с хлистами (на самом деле ещё и с LiteralTypes) можно, например, делать так
eventIdentity :: Name -> Section -> (("event_name", Name) : ("event_section", Section) : HNil)
eventIdentity n s = ...
наделать таких функций и произвольно друг с другом их комбинировать, а в конце просто HFold-ом собрать в ту самую мапку
Аналогичное поведение, опять же, предоставляет Lychee, но там, если мне не изменяет память, есть ограничение 22
Аналогичное поведение х2 предоставляет структурная типизация, но давайте реально смотреть на мир