Size: a a a

2020 July 04

DI

Dmitry Ivanov in Haskell
кажется, это пиратский стрим
источник

R

Roman in Haskell
Vladislav Zavialov
А в системе, где все пруфы это просто Refl, их можно выкинуть (proof irrelevance)
зависит от системы. Если система содержит equality reflection, то нельзя:

Under a false hypothesis, all equations hold and every program is well-typed. As you cannot tell whether your current context contains a false hypothesis (what with the undecidability of propositions and all), it’s basically unsafe to execute open terms.

Если система содержит general recursion, то тоже нельзя, потому что доказательство равенства может быть фейковым и просто зацикливаться, так что надо досчитать до Refl и только потом коерсить

Плюс есть разные варианты иррелевантности. В агде есть по сути compile-time irrelevance и runtime-irrelevance. В первом случае если у тебя есть два значения x1, x2, которые имеют тип .A (точка отвечает за иррелевантность), то оба значения равны для тайпчекера и не существуют в рантайме. Во втором случае они не считаются равными для тайпчекера, но все еще отсуствуют в рантайме. Можно тут про второй случай почитать: https://agda.readthedocs.io/en/v2.6.1/language/runtime-irrelevance.html

Насколько я понимаю, надо читать про Quantitative Type Theory, чтобы понять общую картину, но я не читал
источник

VZ

Vladislav Zavialov in Haskell
источник

VZ

Vladislav Zavialov in Haskell
О, значит runtime-irrelevance это как раз то, что я вроде нормально понимаю (в отличие от остальных вариантов)
источник

VZ

Vladislav Zavialov in Haskell
Круто, это в последней версии добавили
источник

R

Roman in Haskell
Вроде раньше это называлось spine irrelevance и существует уже несколько лет, но хз
источник

A

Aleksandr Khristenko in Haskell
кана
а это имхо очень неправильно, потому как я говорил, никакой обертки нет, это компайлайм метка
А если мы фпамаем над списком значений оборачивая в ньютайп это тоже вырезано будет?
источник

AD

Apache DOG™ in Haskell
кана
ну так нужно же еще иметь в голове правильное представление языка на котором пишешь

иначе это какой-то выдуманный язык поверх реального
Тем язык хуже чем заставляет помнить реализацию всего
источник

к

кана in Haskell
Apache DOG™
Тем язык хуже чем заставляет помнить реализацию всего
тут есть нюанс, что мы считаем поведение newtype каким-то нетривиальным только потому что сравниваем синтаксически с data, и видим другие поведение
источник

аа

аа ааа in Haskell
А как правильно трансформеры расставлять ? Если мне допустим нужна программа работающая с изменяемым состоянием, и в то же время должно быть глобальное состояние неименяемое. Мне нужно делать ReaderT (StateT) или StateT (ReaderT) ?
источник

к

кана in Haskell
было бы скажем

opaque type URL = String

и все функции в этом модуле могли бы спокойно конвертить из URL в String и наоборот - не было бы мысли что newtype ведут себя иначе по сравнению с data, но тогда бы пришлось писать больше сигнатур и не было бы возможности экспортировать маркер
источник

к

кана in Haskell
то что newtype шарит синтаксис с data уже заставляем нас смотреть на это с другой стороны, с того что у newtype необычное поведение, хоть совсем наоборот, это у другой вещи такой же синтаксис как у data
источник

к

кана in Haskell
Aleksandr Khristenko
А если мы фпамаем над списком значений оборачивая в ньютайп это тоже вырезано будет?
ну язык ленивый, а fmap Wrapper это по сути fmap id, так что ничего не произойдет просто
источник

MK

Maxim Koltsov in Haskell
Но можно и явно скоерсить
источник

MK

Maxim Koltsov in Haskell
Тогда точно ничего не произойдёт
источник

VZ

Vladislav Zavialov in Haskell
аа ааа
А как правильно трансформеры расставлять ? Если мне допустим нужна программа работающая с изменяемым состоянием, и в то же время должно быть глобальное состояние неименяемое. Мне нужно делать ReaderT (StateT) или StateT (ReaderT) ?
В случае с ReaderT/StateT не важно
источник

VZ

Vladislav Zavialov in Haskell
Вот ExceptT/StateT будут по-разному себя вести в зависимости от порядка
источник

аа

аа ааа in Haskell
Vladislav Zavialov
В случае с ReaderT/StateT не важно
А может быть разница в производительности ?
источник

VZ

Vladislav Zavialov in Haskell
Может, но это сильно зависит от того, что именно делает код.
источник

VZ

Vladislav Zavialov in Haskell
r -> s -> m (a, s)
s -> r -> m (a, s)
источник