Есть ли способ сделать абстракцию типа данных и просто использовать значения?
data Color a = Blue a | Green a | Red a | Yellow a | Magenta a deriving (Show)
Что-то вроде:
calcColor :: Color a -> Color a -> Maybe a
calcColor (_ x) (_ y) = Just $ x + y
Это не обязательно должно быть в объявлении функции. Один из вариантов, о котором я думал, это иметь что-то вроде fromJust
, но даже это выглядит немного излишним.
fromColor :: Color a -> a
fromColor (Blue t) = t
fromColor (Red t) = t
fromColor (Green t) = t
fromColor (Yellow t) = t
Правка - добавлен контекст и дополнительные пояснения
Из того, как я удалось поставить под сомнение, название может выглядеть как дубликат вопроса.
Я не уверен, но это решать сообществу. Я довольно плохо знаком с Haskell, поэтому, возможно, мой вопрос выглядит глупо, но все же я думаю, что это правильный случай, потому что у меня действительно такая ситуация.
@ FyodorSoikin, @leftaroundabout Ваши ответы помогают мне, но частично. Я постараюсь объяснить лучше, чего именно я хотел бы достичь.
Я хочу думать о типе Цвета как о категории (скажем, G), о цветах, являющихся элементами G, и у меня также есть телефоны, которые бывают разных цветов. Категория телефонов (скажем, H).
Теперь я пытаюсь найти способ использовать морфизмы (функции) категории G с помощью функтора в категории H или наоборот. Например: определить будущие запасы цветового типа на основе продаж телефонов.
Я хочу понять, в какой степени я могу создавать такие типы, как Цвет, чтобы иметь преимущества использования типа при использовании строки. значение.