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
Если бы был Void(...), то значит с конструкторами всеми
Ilya
А так только тип
Ilya
Хотя конечно это похоже на тот еще хак:)
Влод
кстати насчёт экспортов: нельзя никак сказать чтобы не экспортился инстанс тайпкласса?
Влод
ну или чтобы он не импортился
Ilya
Это я хз
Влод
и ещё один вопрос хотел задать, но уже сам нашёл ответ там в этих экспортирующих скобках можно писать ещё и module и соответственно какой угодно модуль экспортировать, что однажды меня серьёзно напрягло
Ilya
Гугл по hiding instance молчит?
Влод
короче не нагуглил однозначного ответа, но кажется нельзя
Влод
предлагается создавать отдельные модули с инстансами, или делать ньютайп
Влод
на практике это думаю не так сильно беспокоит людей. Но думаю это является одним из препятсвий в понимании этих функторов, многие думают что нечто по [божественному умыслу с момента своего зачатия] является функтором, в то время как правильней говорить, что нечто имеет одно из множества функторных представлений (подставь вместо функтора свой любимый тайпкласс)
Влод
инстанс + законы
Влод
законы, конечно, никто не проверяет, они так для галочки висят, так что в основном инстанс, если говорить про хаскель
Нурлан
функторы это специальное понятие из теории категорий
Нурлан
эмм, я проверяю (те которые могу)
Влод
я нет
Ilya
я нет
Ghc тебя покарает
Влод
редко пишу инстансы для всяких фундаментальных вещей
Ilya
Он может преобразовывать выражения, используя эти законы
Влод
у меня первое зерно сомнений однажды закралось с Either
Влод
особенно глупым тогда казалось, что правое и левое совершенно разные приоритеты имеют. (в то время как в других языках их стали называть ok и err)
Ilya
у меня первое зерно сомнений однажды закралось с Either
А что мешает поменять местами смысл Left и Right
Alexander
Какая простите константа Void?
Ilya
А как в этом убедиться
Misha
они все эквивалентны, потому что приводят в зацикливанию
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
Чего тут понимать то
Alexander
Или в том что undefined это bottom есть вопросы?
Alexander
По определению же