По совету Булата взялся прочитать статью Fun with phantom types — это нечто довольно необычное для статей по функциональному программированию. Изложение очень доходчивое, имеются упражнения и реальные примеры применения этих вещей (e.g. типизированный printf для хаскеля). Раньше я думал, что это сильно теоретическая и не очень востребованная тема, понял, что несколько заблуждался.
Короче: всем советую прочитать
P.S. чуть не забыл — phantom types это одно из названий dependent types.
Здравствуйте, palm mute, Вы писали:
К>>P.S. чуть не забыл — phantom types это одно из названий dependent types. PM>Совершенно неверно.
Немного раскрою суть возражения. Зависимые типы — это типы, зависящие от значений, известных лишь во время выполнения. Грубо говоря, в языке с зависимыми типами возможно следующее:
foo : NonEmptyList -> Int
foo = ...
...
xs <- readFromFile "xs.txt"
if empty xs
return 0
else
return (foo xs) -- т. к. проверку сделали, здесь список непустой.
-- другими словами, у xs разные типы в ветках then и else
Зависимых типов в Хаскеле нет. А что такое phantom types — в статье по ссылке описывается хорошо.
Здравствуйте, palm mute, Вы писали:
PM>Здравствуйте, palm mute, Вы писали:
К>>>P.S. чуть не забыл — phantom types это одно из названий dependent types. PM>>Совершенно неверно.
PM>Немного раскрою суть возражения. Зависимые типы — это типы, зависящие от значений, известных лишь во время выполнения.
Не совсем улавливаю, а тот же Dynamic не будет зависеть от времени исполения?
Или результат декомпрессии?
Неувязочки выходят, да и приведённый пример присутствует в статье (хоть и не совсем дословно).
Думаю, что всёж некая разница есть, но она глубже по моим ощущениям (т.к. пока чёткого понимания предмета нет)