Это Тип объединения с одним конструктором, который принимает Запись в качестве единственного параметра типа.
Тот факт, что имя типа и конструкторИмена обоих Item
являются обычной идиомой, но не имеет значения.Это может быть любое другое допустимое имя конструктора:
type Item = Foo { name : String, data : String }
Для практических целей может быть полезно использовать псевдоним типа для внутреннего типа записи, чтобы можно было более кратко извлечь значения.Если вы немного измените положение вещей:
type alias ItemContents = { name : String, data : String }
type Item = Item ItemContents
Вы можете предоставить функцию, которая возвращает внутреннее содержимое:
getItemContents : Item -> ItemContents
getItemContents (Item contents) = contents
И теперь ее можно использовать, как в этом примере REPL:
> item = Item { name = "abc", data = "def" }
Item { name = "abc", data = "def" } : Repl.Item
> contents = getItemContents item
{ name = "abc", data = "def" } : Repl.ItemContents
> contents.name
"abc" : String