В последнее время я играл с LiquidHaskell и Idris, и у меня возник довольно специфический вопрос, который я нигде не мог найти однозначного ответа.
Idris - это язык с типизированной зависимостью, который по большей части хорош,Однако я читал, что некоторые термины типов во время проверки типов могут «просачиваться» из времени компиляции во время выполнения, даже если Idris делает все возможное, чтобы исключить эти термины (это особая функция, даже ..).Тем не менее, это устранение не является совершенным, и иногда это происходит.Если, почему и когда это происходит, это не сразу понятно из кода и иногда влияет на производительность во время выполнения.
Я видел людей, предпочитающих систему типов Haskells, потому что это не может произойти там.Когда проверка типа сделана, это сделано.Типы «выбрасываются» и не используются во время выполнения.
Какова история с LiquidHaskell?Он значительно расширяет возможности системы типов по сравнению с традиционным Haskell.Вводит ли LiquidHaskell также биты времени выполнения для определенных типов «созвездий» или (как я подозреваю) просто добавляет еще один слой «лучших» типов по сравнению с Haskell, которые не влияют на время выполнения в любой форме или форме.
Имеется в виду, что если удалить специальные аннотации типа LiquidHaskell и скомпилировать их со стандартным GHC, всегда ли код создается одинаково?Другими словами: является ли расширение LiquidHaskell только во время компиляции?
Если да, это кажется лучшим из обоих миров, или LiquidHaskell просто не так выразителен в системе типов, как Idris, и поэтому управляется без запускасроки?