Почему Haskell выбрала продукты типа lift?
Вы можете обосновать этот выбор дизайна, не апеллируя к лени или опровержимым шаблонам. Тот же выбор дизайна сделан ML из соображений поддержки полиморфизма. Рассмотреть возможность
fst (x, y) = x
snd (x, y) = y
Теперь, если (a, (b, c))
является синтаксическим сахаром для (a, b, c)
, довольно сложно понять, как специализировать fst
и snd
, чтобы использовать этот тип в качестве аргумента. Но
fst :: (a, (b, c)) -> a
snd :: (a, (b, c)) -> (b, c)
вполне разумны. Поскольку полиморфные функции, такие как fst
и snd
, невероятно полезны, и Haskell, и ML дают программисту возможность отличать (a, (b, c))
и ((a, b), c)
от (a, b, c)
.
(Для людей, которые заботятся о затратах, структура типов также является разумным ориентиром для определения размера типа и количества косвенных обращений (загрузок), необходимых для получения его элементов. Некоторым программистам необходимо или они хотят знать о таких вещах и иметь некоторые небольшая степень контроля над ними.)
person
Norman Ramsey
schedule
22.03.2010
(a, (b, (c, ())))
, например HList - person yairchu   schedule 23.03.2010