Тип Haskell против Конструктора Данных
Я учу Хаскель изlearnyouahaskell.com, У меня проблемы с пониманием конструкторов типов и конструкторов данных. Например, я нея действительно понимаю разницу между этим:
data Car = Car { company :: String
, model :: String
, year :: Int
} deriving (Show)
и это:
data Car a b c = Car { company :: a
, model :: b
, year :: c
} deriving (Show)
Я понимаю, что первый просто использует один конструктор (Car
) для построения данных типаCar
, Я неЯ действительно не понимаю второй.
Кроме того, как типы данных определены следующим образом:
data Color = Blue | Green | Red
вписаться во все это?
Из того, что я понимаю, третий пример (Color
) это тип, который может быть в трех состояниях:Blue
Green
или жеRed
, Но это противоречит тому, как я понимаю первые два примера:Car
может быть только в одном состоянии,Car
, который может принимать различные параметры для построения? Если да, то как вписывается второй пример?
По сути, я ищу объяснение, которое объединяет три приведенных выше примера кода / конструкции.