@haskellru

Страница 1048 из 1551
Vladimir
03.04.2018
04:58:04
И в определении списка тоже путаница. Может интервьюер считал, что списки без [1,2..] -- не списки.

Theta
03.04.2018
04:58:25
нет, такого в контексте не было...

Таке он сказал что и строки соответственно строгими не могут быть... по-моему O_o

так как строки основанны на списках

Google
Theta
03.04.2018
04:59:26
(впрочем не на списках же тоже можно сделать, лол)

(блин, вот что значит хреново спать перед собеседованием...)

Dmitry
03.04.2018
05:00:27
Хм, а какое определение строгих типов? Что-то ненагугливается. Имеется ввиду строгая типизация? Ну так в Хаскеле она строгая.

Theta
03.04.2018
05:01:17
Ну вот же например https://hackage.haskell.org/package/strict-types два слова стрикт и тайпс

А не, не много не то

Theta
03.04.2018
05:01:49
Но реализацию строгого списка я скинул

Index
03.04.2018
05:03:39
В общем бесконечный список в стиле tie the knot можно и строгий сделать, а вот корекурсивный вроде [1, 2, ..] нельзя, наверное интервьер думал про второй тип списков

Theta
03.04.2018
05:03:59
нет, он именно про принципиальную вохможность определения

data List a = Nil | !a :! !(List a)

вот

и типа это невозможно

грил

Google
Index
03.04.2018
05:04:27
Ну это возможно конечно

Theta
03.04.2018
05:04:36
пример взят из библиотеки по ссылке

Index
03.04.2018
05:05:26
Чего б этому быть невозможным, bang-и просто приводят к расстановке seq при паттерн-матчинге

Oleg
03.04.2018
05:05:50
Примеры бесконечных https://wiki.haskell.org/Memoization#Efficient_tree_data_structure_for_maps_from_Int_to_somewhere https://hackage.haskell.org/package/Stream-0.4.7.2/docs/Data-Stream.html

Возможно, собеседователь имел в виду второй пример

Theta
03.04.2018
05:07:09
Чего б этому быть невозможным, bang-и просто приводят к расстановке seq при паттерн-матчинге
ну... по-моему в случае с типами данных это запрещает быть неопределёнными вложения в тип.

и мы не про примеры говорили

с ним

только конечные значения только хардкор

Index
03.04.2018
05:08:23
ну... по-моему в случае с типами данных это запрещает быть неопределёнными вложения в тип.
Ну оно запрещает за счёт seq. Иногда еще оптимизация срабатывает unpack strict fields

Theta
03.04.2018
05:08:37
вот вот

Index
03.04.2018
05:08:38
Но очевидно не с хвостом списка

Т.к. он рекурсивный

Theta
03.04.2018
05:09:09
Что? Конечный определённый хвост разве не строг?

Index
03.04.2018
05:09:24
Он строг, но не unpacked

Oleg
03.04.2018
05:09:33
и мы не про примеры говорили
я имел в виду пример АДТ, который не может быть определён через конструкторы, требующий whnf от каждого аргумента

Theta
03.04.2018
05:09:36
А, ну про распаковку не говорили

Google
Theta
03.04.2018
05:10:54
без всяких бесконечностей

O_o

Oleg
03.04.2018
05:11:14
ну... имелись в виду простые рекурсивные деревоподобные АДТ
Ну вот тебе два простых рекурсивных деревоподоьных АДТ, но они принципиально бесконечны

И стрикт лист, его область значений меньше, чем у прелюдного. Именно на множество вот тех бесконечных списков. Так что это не совсем "аналог"

Theta
03.04.2018
05:13:12
А... то есть список юез nil.... data Stream a = Cons a (Stream a) окей, но там было с nil... либо тотальное недопонимание возникло друг друга

ну такой бесконечный список конечно да, не может

но строка это эе конечный список

стандартный

Theta
03.04.2018
05:14:44
Не обязательно
Но с другой стороны очевидно что бесконечная структура и не может быть строгой

в чём суть вопроса тогда?

Конечные строки могут быть строгими

Либо недопониание, либо запутывание какое-то T_T

Ещё до этого перепутал с трансформерами... правда признал за собой косяк

Oleg
03.04.2018
05:17:41
в чём суть вопроса тогда?
Чтобы ты это сказал.

Index
03.04.2018
05:17:45
Я кстати ошибся про то, что tie the knot можно сделать строгим. Сейчас проверил в GHCi, уходит в бесконечный цикл, видимо при конструировании тоже seq там

Index
03.04.2018
05:18:37
Ну я вот так попробовал: Prelude> data List a = Nil | Cons !a !(List a) Prelude> repeat a = let x = Cons a x in x

Google
Index
03.04.2018
05:18:48
Оно видимо вставил seq x и сломалось

repeat () циклится

Theta
03.04.2018
05:19:26
Чтобы ты это сказал.
да, но упора как-то не было на бескончность. соответственно я подумал о реализации для хранения некоторой конечной структуры данных... ну ок, возможно и недопонимание вышло.

Theta
03.04.2018
05:20:32
И в контексте данного вопроса, в чём ещё?

В заглушке в виде undefined?

Oleg
03.04.2018
05:20:45
в любом боттоме

Theta
03.04.2018
05:20:54
Никто не говорит об эквивалентности строгого и нестрогого

и не говорил

что делает всё же несколько бессмысленным вопрос

Theta
03.04.2018
05:21:54
в любом боттоме
ну про боттом я уже итак сказал... назвав заглушками undefined

из-за аналогии...

Oleg
03.04.2018
05:22:31
есть боттомы помимо бесконечной рекурсии и undefined

Theta
03.04.2018
05:23:41
ну извините, https://wiki.haskell.org/Bottom

Oleg
03.04.2018
05:24:12
Theta
03.04.2018
05:25:22
да как бы не за что, но ведь undefined это заглушка, которая возвращает bottom. Невычисленный конец

Oleg
03.04.2018
05:25:46
есть боттомы помимо бесконечной рекурсии и undefined

Index
03.04.2018
05:25:48
есть боттомы помимо бесконечной рекурсии и undefined
Какие? Я могу назвать только бесконечную непродуктивную рекурсию и imprecise exceptions (= undefined и другие вызовы throw)

Google
Index
03.04.2018
05:26:26
error это вызов throw, так что из той же серии

undefined = error "Prelude: undefined" error s = throw (ErrorCall s) примерно

Alexander
03.04.2018
05:27:00
списки конечно можно сделать строгими, но с ними будет все плохо - достаточно бесполезная структура

Theta
03.04.2018
05:27:05
Ну допустим неправильно сказал "заглушка undefined" замените на bottom

Alexander
03.04.2018
05:27:29
на пустом месте получим увеличение сложности и необходимость костылей

пример длинного поста на тему https://gist.github.com/klapaucius/1405389

Index
03.04.2018
05:28:10
@qnikst скажи, так возможно сделать tie the knot со строгим списком? Теоретически не вижу причин почему, т.к. в repeat 1 и голова и хвост могут быть в WHNF, но на практике не вышло

Alexander
03.04.2018
05:28:18
сейчас попробую

Theta
03.04.2018
05:28:22
и это очевидно, что это ключевое отличие строгого от ленивого и делает реализации неэквивалентными, однако судя по тому, что вопрос был, можно ли реализовать что либо вообще строго, соответственно, допускаются некоторые отклонения от эквивалентности

почему бы и не допустить, что кроме отсутствия боттома допускаем отсутствие бесконечности?

Alexander
03.04.2018
05:29:45
судя по ответу интервьюверов близок к тому, про что они хотели поговорить

Oleg
03.04.2018
05:29:46
Короче, нет. Не вышло. Не оправдан. Собес провалил не зр.

почему бы и не допустить, что кроме отсутствия боттома допускаем отсутствие бесконечности?
За эти слова тебя сразу низвергают до скалиста, и ты идёшь собеседоваться ко мне

Alexander
03.04.2018
05:31:44
@int_index у меня не получилось, даже с irrefutable patterns

Theta
03.04.2018
05:32:09
судя по ответу интервьюверов близок к тому, про что они хотели поговорить
не, как-то замяли и перешли к куче других вопросов. Про костыли и неудобства вопросов не возникало, было сразу сказанно что невозможно O_o

Alexander
03.04.2018
05:32:57
ну это будет список строго меньший по возможностям

т.е. если они хотят бесконечные списки - так не сделать со строгим

Theta
03.04.2018
05:34:17
Ну это само собой))

Собственно, кто захочет бесконечный строгий тип?

Alexander
03.04.2018
05:35:04
точнее создать то можно

Страница 1048 из 1551