
Ilya
21.02.2017
16:54:00
data же ленивый

Alexander
21.02.2017
16:54:46
data Void = Void Void не bottom

Ilya
21.02.2017
16:55:15

? animufag ?
21.02.2017
16:55:20
потому что невычислимое выражение? разве что можно прикопаться к тому что боттом = невычислимое для каждого типа, а здесь для данного конкретного

Google

Ilya
21.02.2017
16:55:35
Видел же стримы?
Там то же самое
И это никакой не боттом

? animufag ?
21.02.2017
16:56:05
нет не видел

Ilya
21.02.2017
16:56:17
От них можно брать take и т.д.

? animufag ?
21.02.2017
16:56:24
но и не видел определения боттома зависещего от ленивости

Kit
21.02.2017
16:56:32
Если выражение не вычисляемое это не значит что его нельзя вычислять. Невычисляемый (bottom) это значит что неизвестно будет ли формула упрощена (вычеслена)

Ilya
21.02.2017
16:56:37
Ну как список, только без конструктора пустого списка

? animufag ?
21.02.2017
16:56:55
ну ок идею понимаю

Ilya
21.02.2017
16:56:57
Мы же определяем поток как data Stream a = a :& Stream a

Kit
21.02.2017
16:56:57
А вычислять и упрощать да сколько влезет

? animufag ?
21.02.2017
16:57:05
легко определить бесконечный список

Google

? animufag ?
21.02.2017
16:57:12
и ты про то же самое

Ilya
21.02.2017
16:57:25
Вот тебе специальная data

Kit
21.02.2017
16:57:25

Ilya
21.02.2017
16:58:01

Kit
21.02.2017
16:58:12
Поток можно пустить на декомпозицию
Вычислить нельзя

Ilya
21.02.2017
16:58:28
Например напечатать первые 10 элементов или мапнуть

Kit
21.02.2017
16:58:50
Печать первых 10 идёт через декомпозицию
Не через полное вычисление

? animufag ?
21.02.2017
16:59:14
тогда допустим
1) a = 1:a
2) length a
1е не боттом. 2е боттом?

Kit
21.02.2017
17:00:09
По мне так да

? animufag ?
21.02.2017
17:00:35
по мне так одно и то же

Kit
21.02.2017
17:01:20
А как проверить что что-то Боттом ?
В компиляторе такое есть?

? animufag ?
21.02.2017
17:01:33
нет
про компилятор забудь

Ilya
21.02.2017
17:01:42

? animufag ?
21.02.2017
17:01:45
мы тут наверное про теорию

Ilya
21.02.2017
17:01:52
Как ты их вообще сравниваешь
Я не понял

Google

Ilya
21.02.2017
17:02:05
bottom это ЗНАЧЕНИЕ

? animufag ?
21.02.2017
17:02:13
а харошо
блин да это я смачно тут народ обманул

Ilya
21.02.2017
17:02:39
Ты имеешь в виду, является ли a bottom?

? animufag ?
21.02.2017
17:02:40
a и length a

Ilya
21.02.2017
17:02:57
a не bottom
length a думаю, что да
Но блин это на самом деле разговор трех нубов

? animufag ?
21.02.2017
17:03:49
всё таки боттом?

Ilya
21.02.2017
17:03:55
Да

? animufag ?
21.02.2017
17:04:17
ну да, стоит как бы забыть про то что мы все некомпетентны
это только мешает

? animufag ?
21.02.2017
17:04:46
если бы здесь заявился бы авторитет то каждый бы просто сказал – ага ок я понял
и всё, а так рассуждение

Ilya
21.02.2017
17:07:41
я вот попробую резюмировать
1. Для любого выражения в Haskell можно сказать, что либо его верхний конструктор вычисляется за конечное время (приведение к СЗНФ, слабой заголовочной нормальной форме), либо нет. Нам не важно, что эта задача в общем случае алгоритмически неразрешима (всем известная "проблема останова"). Главное, что это так.
2. Если верен второй случай (верхний конструктор невычислим), то мы называем такое значение bottom
3. Тем не менее, даже для значений bottom можно вывести их тип. Например length (бесконечный список) — bottom типа Int
4. Мы говорим, что все bottom одного и того же типа эквивалентны и суть одно и то же значение этого типа.
5. Дополнительно мы определяем полимофный undefined, который являет собой bottom любого типа. bottom любого конкретно типа и undefined - одно и то же.
@qnikst это не бред?

Alexander
21.02.2017
17:16:29
Попозже прочитаю отвечу

? animufag ?
21.02.2017
17:16:49
>Мы говорим, что все bottom одного и того же типа эквивалентны
плюс бесконечность и минус бесконечность

Alexander
21.02.2017
17:16:55
Я тут сына домой веду неудобно читать

Google

Ilya
21.02.2017
17:17:06

? animufag ?
21.02.2017
17:18:05
ну или рекурсия по разным конструкторам, хотя в итоге конечно не важно какое будет значение

Ilya
21.02.2017
17:19:07
А если энергичные, то одинаковые, bottom
я так думаю
А насчёт плюс бесконечности и минус бесконечности — ты какой тип имеешь в виду?

? animufag ?
21.02.2017
17:21:18
ну ладно.
one = 1 * one
zero = 0 * zero
ну это наверное вопрос предпочтений: можно ли к этим значениям применять аналитику, и самостоятельно без компилятора доказывать, что они не равны.
Если да, то боттомы равны в пределах одного конструктора

Ilya
21.02.2017
17:26:57
кстати интересно, что ghc не в состоянии вычислить, что zero == 0
т.е. там нет фишки типа
0 * _ = 0

Admin
ERROR: S client not available

? animufag ?
21.02.2017
17:27:36
да, я тоже пытался манипулировать этим

Ilya
21.02.2017
17:27:49
как для Bool

? animufag ?
21.02.2017
17:28:10
потому что * не тайп конструктор)

Ilya
21.02.2017
17:28:41
и что, && тоже не конструктор
однако False && _ = False
а вместо _ может быть чё угодно
даже bottom

Kit
21.02.2017
17:29:41

Google

Ilya
21.02.2017
17:30:35
λ> let false = False && false
λ> false
False
λ>

Kit
21.02.2017
17:30:55
В определении чисел в Haskell не сказано что у них должны существовать 1 и 0

Ilya
21.02.2017
17:31:06

? animufag ?
21.02.2017
17:31:11
ну так то мне помнится слово thunk (не вычесленное выражение типа 0 * _) и мне казалось, что хаскель делает какие то подобные оптимизации в рантайме. ну мб только на уровне data типов

Kit
21.02.2017
17:31:36
И не делают

Ilya
21.02.2017
17:31:52
Почему нельзя для Integer такое сделать?
в теории

Kit
21.02.2017
17:32:16
Но * пришла не из integer

? animufag ?
21.02.2017
17:32:43
это речь про Num (или как там определен *)

Kit
21.02.2017
17:32:51
Она определяется в классе чисел
А в классе чисел не для всех чисел есть 0 и 1

Ilya
21.02.2017
17:33:34
да я думаю там всё проще
умножение передаётся напрямую процессору
без всякого паттерн-матчинга

? animufag ?
21.02.2017
17:34:43
слушай, а ведь и правда то что False && _ = False определено прямо в инстансе Bool

Kit
21.02.2017
17:34:52
Умножение через инстанс определяется, но для стандартных типов да

? animufag ?
21.02.2017
17:35:05
а инстансы Integer для Num наверное и не нарыть
они тип платформо-зависмые

Ilya
21.02.2017
17:35:40
но в Num есть функция fromInteger