Цвет - это просто тип, а не атрибут. В системе типов нет ничего, что указывало бы на то, что Color имеет какие-либо особые отношения с FontAttribute. Все, что происходит, когда вы определяете тип данных FontAttribute, это то, что он создает конструктор с именем FontColor, который представляет собой обычную функцию со следующей сигнатурой типа:
FontColor :: Color -> FontAttribute
Итак, если вы объявили какой-то новый тип с именем Link:
data LinkAttrubute = LinkColor Color | ...
Тогда цвет также может быть сохранен в атрибуте LinkAttribute. Конструктор не подразумевает исключительную связь только с этим типом данных. Весь ваш тип данных FontAttribute говорит о том, что он МОЖЕТ содержать только цвет.
Haskell не имеет встроенной концепции атрибутов, поскольку он не имеет встроенной концепции объектов. ОДНАКО, вы можете моделировать атрибуты, используя тип Lens из пакета data-lens (или fclabels). Я бы связал вам пакеты, но я нахожусь на моем телефоне, и это сложно.