(К вашему сведению, этот вопрос почти наверняка повторяется)
Решения:
1) Префикс полей с тегом, указывающим тип (чрезвычайно распространенный)
data Customer = Customer {..., cFoo :: Int, ...}
2) Используйте классы типов (менее распространенные, люди жалуются на префиксы, такие как cFoo
, неудобно, но, очевидно, не так плохо, что они напишут класс и экземпляр или используют TH для того же).
class getFoo a where
foo :: a -> Int
instance getFoo Customer where
foo = cFoo
3) Используйте более подходящие имена полей Если поля на самом деле разные (что не всегда верно, мой компьютер имеет возраст, как и мой сотрудник), тогда это лучшее решение.