От чтения статьи в Википедии для lambda cube и это thread, когда применяются к Haskell, я понимаю, чтоHaskell - полиморфизм и значение в зависимости от типов
- семейства терминов проиндексированных терминов - типичная функции от значения дорожить
- семейство терминов, индексированных по типам - ???
- семейства типов проиндексированных типов - параметрический полиморфизм в конструкторах типа, семьи типа
- семейства типов проиндексированных терминов - типы пи (в которых вы фальшивке с одноплодными типами в Haskell), типами сигмы, и т.д. ...
Пожалуйста, исправьте меня, если я привел приведенные выше примеры неправильно. Цитирование из этой статьи Википедии:
- Условия в зависимости от типа, или полиморфизм. Система F, так же как и лямбда-исчисление второго порядка (записанная как λ2 на диаграмме), получается путем наложения только этого свойства.
Я не знаю, как Haskell вписывается в эту (2) сверху. У Haskell есть сильное различие между терминами и типами и стирание типа, поэтому у вас нет элементов отражения в ООП, таких как typeof(a)
или b.GetType()
, а затем приступайте к возврату некоторого значения на основе информации о типе во время выполнения.
Так что единственное, что я могу думать в Haskell, относящиеся к (2), может быть,
- Возвращение типа полиморфизма скажем
mempty
вData.Monoid
, где величина зависит от типа экземпляра - семейства данных, где вы берете типы на LHS и имеете конструкторы стоимости на RHS
Будет ли это правильно? Хотя я чувствую, что не сделал все связи ...
Правильно ли было бы, чтобы ad-hoc-полиморфизм удовлетворял (2), а параметрический полиморфизм удовлетворяет (3)? Но тогда как ad-hoc vs параметрически относится к разнице в RHS типов с семействами данных?
Одна последняя вещь, как бы суммировать значения типа, такие как
Nothing :: forall a. Maybe a
Right 3 :: forall a. Num b => Either a b
, когда они не имеют тип контекста вписывается в эту картину? Я предполагаю, что это пример (2)?
Благодарим за объяснение и полезную ссылку на ответ Конора. Таким образом, мой забор будет заключаться в том, что лямбда-куб представляет собой просто набор для разных расширений базового лямбда-исчисления. Существуют и другие расширения, такие как Fc [где семейства типов несколько напоминают Fω, но не совсем], или полиморфизм подтипов в OO. – gspindles
Короче говоря, лямбда-куб суммирует, разрешены ли функции от X до Y, где X и Y могут быть «типами» или «терминами». FYI, [Здесь] (http://augustss.blogspot.dk/2007/10/simpler-easier-in-recent-paper-simply.html) аккуратная реализация учебника для лямбда-куба, где вы можете легко перемещаться между точек куба, разрешая/запрещая абстракции. –
Спасибо! Я прочитаю его, когда вернусь домой. Таким образом, лямбда-куб фактически не имеет ничего общего с добрым уровнем и выше, хотя это может и не понадобиться. – gspindles