У меня есть следующие для HTML шрифта тега:Типы Haskell Алгебраические данных
data Color = HexColor Int | RGBColor Int Int Int | ColorString String deriving Show
data FontAttribute = Size Int | Face String | FontColor Color deriving Show
data Font = Font [FontAttribute] deriving Show
Я построить один так:
Font [Size 23,Face "Arial",Color (RGBColor 240 23 43)]
Меня беспокоит то, что FontColor
данные/конструктор значение, которое имеет тип FontAttribute требует типа Color в качестве аргумента. Это означает, что Color является атрибутом общего типа для любого типа тега, а определенный тег имеет определенный поднабор атрибутов (в этом случае Font имеет FontAttribute, который может быть Size, Face или FontColor). Есть ли более ясный способ выразить это или звучит ли моя реализация?
Предполагается, что можно создать 'Font', описываемый любым числом и комбинацией или 'FontAttribute'? 'Font [Face" Arial ", Face" Impact "]' не кажется очень полезным ... – delnan
Да, любой допустимый список. Вы можете сделать то же самое в XHTML и CSS, я думаю, что происходит, зависит от реализации. Обычно браузер использует последнее значение. Меня больше беспокоило тип иерархии. –
Итак, вы хотите ограничить «Цвет» для использования исключительно с конструктором FontColor? Это ваша забота? Кстати, вам не нужны парсеры вокруг [FontAttribute]. –