
Ilya
21.02.2017
14:34:31
λ> :t void
void :: Void

Kit
21.02.2017
14:35:54

Ilya
21.02.2017
14:35:59
Мой

Kit
21.02.2017
14:36:22
Все равно не вижу проблемы

Google

Kit
21.02.2017
14:37:19
Смотрится все ужасно. Уже три сущности с одним и тем же именем

Ilya
21.02.2017
14:38:10
Всёёё, я понял

Kit
21.02.2017
14:38:23
Просто хотел пример привести но он математический

Ilya
21.02.2017
14:38:35
Короче объясняю

Kit
21.02.2017
14:38:41
Давай

Ilya
21.02.2017
14:38:56
Модуль Data.Void не экспортирует конструктор Void
А только сам тип
Поэтому void так определить невозможно
newtype Void = Void Void
void = Void void
Для стандартного Data.Void

? animufag ?
21.02.2017
14:40:03
а да ок теперь

Google

Ilya
21.02.2017
14:40:24
Я такую фишечку уже видел

? animufag ?
21.02.2017
14:40:40
только как это понять?

Ilya
21.02.2017
14:40:43
В главе про монаду ST

? animufag ?
21.02.2017
14:40:54
module Data.Void
( Void
, absurd
, vacuous
, vacuousM
) where
как понять что тут только тип, а не конструктор

Ilya
21.02.2017
14:41:18
Если бы был Void(...), то значит с конструкторами всеми
А так только тип
Хотя конечно это похоже на тот еще хак:)

? animufag ?
21.02.2017
14:46:07
кстати насчёт экспортов: нельзя никак сказать чтобы не экспортился инстанс тайпкласса?
ну или чтобы он не импортился

Ilya
21.02.2017
14:50:37
Это я хз

? animufag ?
21.02.2017
14:50:50
и ещё один вопрос хотел задать, но уже сам нашёл ответ
там в этих экспортирующих скобках можно писать ещё и module и соответственно какой угодно модуль экспортировать, что однажды меня серьёзно напрягло

Ilya
21.02.2017
14:50:52
Гугл по hiding instance молчит?

? animufag ?
21.02.2017
14:56:08
короче не нагуглил однозначного ответа, но кажется нельзя
предлагается создавать отдельные модули с инстансами, или делать ньютайп
на практике это думаю не так сильно беспокоит людей.
Но думаю это является одним из препятсвий в понимании этих функторов, многие думают что нечто по [божественному умыслу с момента своего зачатия] является функтором, в то время как правильней говорить, что нечто имеет одно из множества функторных представлений
(подставь вместо функтора свой любимый тайпкласс)

Kit
21.02.2017
15:04:31

? animufag ?
21.02.2017
15:05:00
инстанс + законы
законы, конечно, никто не проверяет, они так для галочки висят, так что в основном инстанс, если говорить про хаскель

Google

Kit
21.02.2017
15:06:08
функторы это специальное понятие из теории категорий
эмм, я проверяю (те которые могу)

? animufag ?
21.02.2017
15:06:29
я нет

Ilya
21.02.2017
15:06:48

? animufag ?
21.02.2017
15:06:50
редко пишу инстансы для всяких фундаментальных вещей

Ilya
21.02.2017
15:07:43
Он может преобразовывать выражения, используя эти законы

Kit
21.02.2017
15:07:58

Ilya
21.02.2017
15:18:12

? animufag ?
21.02.2017
15:19:02
у меня первое зерно сомнений однажды закралось с Either
особенно глупым тогда казалось, что правое и левое совершенно разные приоритеты имеют. (в то время как в других языках их стали называть ok и err)

Ilya
21.02.2017
15:20:04

Alexander
21.02.2017
16:12:17

Ilya
21.02.2017
16:23:47

Alexander
21.02.2017
16:24:17
Какая простите константа Void?

Ilya
21.02.2017
16:24:17
А как в этом убедиться

Misha
21.02.2017
16:24:24
они все эквивалентны, потому что приводят в зацикливанию

Ilya
21.02.2017
16:24:39

Alexander
21.02.2017
16:24:55
Какая константа void?

? animufag ?
21.02.2017
16:25:09
newtype Void = Void Void
void = Void void
λ> :t void
void :: Void

Google

Ilya
21.02.2017
16:25:43
Вот эта
void очевидно населяет тип Void. Но если она совпадает с undefined, который населяет любой тип, то ок
Осталось понять, так ли это

? animufag ?
21.02.2017
16:28:21
хотя не. момент

Ilya
21.02.2017
16:29:07
Тип то один

Misha
21.02.2017
16:29:21
да можно сколько угодно таких типов накрутить
эффект один

? animufag ?
21.02.2017
16:35:41
Language:
haskell
Source:
data Void = Void Void
void = Void void
instance Eq Void where
_ == _ = True
main = print $ void == undefined
Result:
True

Admin
ERROR: S client not available

? animufag ?
21.02.2017
16:35:55
всё
неопровержимое доказательство

Ilya
21.02.2017
16:36:13
Офигенный инстанс

? animufag ?
21.02.2017
16:36:23
взял отсюда https://hackage.haskell.org/package/void-0.7.1/docs/src/Data-Void.html#Void
наверное ты думал, что я сам только что выдумал
чтобы подтасовать

Ilya
21.02.2017
16:37:31
Ну ты докопался до ==
Я имел в виду не это
Да, == мы можем как угодно определить

? animufag ?
21.02.2017
16:38:00
приведи своё определение эквивалентности

Google

Alexander
21.02.2017
16:38:55
void расходится это bottom
Чего тут понимать то

Ilya
21.02.2017
16:39:19

Alexander
21.02.2017
16:39:22
Или в том что undefined это bottom есть вопросы?
По определению же

Ilya
21.02.2017
16:39:34

Alexander
21.02.2017
16:39:42
Почему?

? animufag ?
21.02.2017
16:39:56
вот например ещё один вариант, назовём его "синтаксическая эквивалентность"
undefined и void по буквам не совпадает, так что они не эквивалентны

Alexander
21.02.2017
16:40:20
А let loop = loop in loop?

? animufag ?
21.02.2017
16:44:08

Ilya
21.02.2017
16:46:02
Хорошо, допустим. Для закрепления:
Если мы определим
data Void = Void Void
void = Void void
То void НЕ будет bottom, верно? Потому что находится в СЗНФ? А для
newtype Void = Void Void
void невозможно привести к СЗНФ, поэтому это bottom
Так?
Сорри, с телефона пишу, опечатки

Kit
21.02.2017
16:48:58
Декомпозиция в Haskell определяет бесконечные циклы
Ты можешь с ними работать не можешь вычислить
Скажите мне в чем проблема? Я не понимаю

? animufag ?
21.02.2017
16:52:08

Kit
21.02.2017
16:52:18
Выражение void = Void void верное

Ilya
21.02.2017
16:52:35
Ща я разберусь, а потом тебе объясню

Kit
21.02.2017
16:52:55
Это как определение бесконечности для целых чисел

? animufag ?
21.02.2017
16:53:07