Итак, я изучаю 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
, который может принимать различные параметры для сборки? Если да, то как второй пример вписывается?
По сути, я ищу объяснение, которое объединяет приведенные выше три примера кода/конструкции.