Ilya
Мой
Нурлан
Все равно не вижу проблемы
Нурлан
Смотрится все ужасно. Уже три сущности с одним и тем же именем
Нурлан
Мой
Как у тебя с матикой?
Ilya
Всёёё, я понял
Ilya
Нурлан
Просто хотел пример привести но он математический
Ilya
Короче объясняю
Нурлан
Давай
Ilya
Модуль Data.Void не экспортирует конструктор Void
Ilya
А только сам тип
Ilya
Поэтому void так определить невозможно
Ilya
newtype Void = Void Void
void = Void void
Ilya
Для стандартного Data.Void
Влод
а да ок теперь
Ilya
Я такую фишечку уже видел
Влод
только как это понять?
Ilya
В главе про монаду ST
Влод
module Data.Void
( Void
, absurd
, vacuous
, vacuousM
) where
Влод
как понять что тут только тип, а не конструктор
Ilya
Если бы был Void(...), то значит с конструкторами всеми
Ilya
А так только тип
Ilya
Хотя конечно это похоже на тот еще хак:)
Влод
кстати насчёт экспортов: нельзя никак сказать чтобы не экспортился инстанс тайпкласса?
Влод
ну или чтобы он не импортился
Ilya
Это я хз
Влод
и ещё один вопрос хотел задать, но уже сам нашёл ответ
там в этих экспортирующих скобках можно писать ещё и module и соответственно какой угодно модуль экспортировать, что однажды меня серьёзно напрягло
Ilya
Гугл по hiding instance молчит?
Влод
короче не нагуглил однозначного ответа, но кажется нельзя
Влод
предлагается создавать отдельные модули с инстансами, или делать ньютайп
Влод
на практике это думаю не так сильно беспокоит людей.
Но думаю это является одним из препятсвий в понимании этих функторов, многие думают что нечто по [божественному умыслу с момента своего зачатия] является функтором, в то время как правильней говорить, что нечто имеет одно из множества функторных представлений
(подставь вместо функтора свой любимый тайпкласс)
Нурлан
Влод
инстанс + законы
Влод
законы, конечно, никто не проверяет, они так для галочки висят, так что в основном инстанс, если говорить про хаскель
Нурлан
функторы это специальное понятие из теории категорий
Нурлан
эмм, я проверяю (те которые могу)
Влод
я нет
Ilya
Влод
редко пишу инстансы для всяких фундаментальных вещей
Ilya
Он может преобразовывать выражения, используя эти законы
Нурлан
Ilya
Влод
у меня первое зерно сомнений однажды закралось с Either
Влод
особенно глупым тогда казалось, что правое и левое совершенно разные приоритеты имеют. (в то время как в других языках их стали называть ok и err)
Ilya
Alexander
Ilya
Alexander
Какая простите константа Void?
Ilya
А как в этом убедиться
Misha
они все эквивалентны, потому что приводят в зацикливанию
Ilya
Alexander
Какая константа void?
Влод
newtype Void = Void Void
void = Void void
Влод
λ> :t void
void :: Void
Ilya
Вот эта
Ilya
void очевидно населяет тип Void. Но если она совпадает с undefined, который населяет любой тип, то ок
Ilya
Осталось понять, так ли это
Влод
хотя не. момент
Ilya
Тип то один
Misha
да можно сколько угодно таких типов накрутить
Misha
эффект один
Влод
Language:
haskell
Source:
data Void = Void Void
void = Void void
instance Eq Void where
_ == _ = True
main = print $ void == undefined
Result:
True
Влод
всё
Влод
неопровержимое доказательство
Ilya
Офигенный инстанс
Влод
взял отсюда https://hackage.haskell.org/package/void-0.7.1/docs/src/Data-Void.html#Void
Влод
наверное ты думал, что я сам только что выдумал
Влод
чтобы подтасовать
Ilya
Ну ты докопался до ==
Ilya
Я имел в виду не это
Ilya
Да, == мы можем как угодно определить
Влод
приведи своё определение эквивалентности
Alexander
void расходится это bottom
Alexander
Чего тут понимать то
Ilya
Alexander
Или в том что undefined это bottom есть вопросы?
Alexander
По определению же
Ilya