Theta
вот вот
Vladislav
Но очевидно не с хвостом списка
Vladislav
Т.к. он рекурсивный
Theta
Что? Конечный определённый хвост разве не строг?
Vladislav
Он строг, но не unpacked
Oleg
и мы не про примеры говорили
я имел в виду пример АДТ, который не может быть определён через конструкторы, требующий whnf от каждого аргумента
Theta
А, ну про распаковку не говорили
Theta
без всяких бесконечностей
Theta
O_o
Oleg
ну... имелись в виду простые рекурсивные деревоподобные АДТ
Ну вот тебе два простых рекурсивных деревоподоьных АДТ, но они принципиально бесконечны
Oleg
И стрикт лист, его область значений меньше, чем у прелюдного. Именно на множество вот тех бесконечных списков. Так что это не совсем "аналог"
Theta
А... то есть список юез nil.... data Stream a = Cons a (Stream a) окей, но там было с nil... либо тотальное недопонимание возникло друг друга
Theta
ну такой бесконечный список конечно да, не может
Theta
но строка это эе конечный список
Theta
стандартный
Theta
Не обязательно
Но с другой стороны очевидно что бесконечная структура и не может быть строгой
Theta
в чём суть вопроса тогда?
Theta
Конечные строки могут быть строгими
Theta
Либо недопониание, либо запутывание какое-то T_T
Theta
Ещё до этого перепутал с трансформерами... правда признал за собой косяк
Oleg
в чём суть вопроса тогда?
Чтобы ты это сказал.
Vladislav
Я кстати ошибся про то, что tie the knot можно сделать строгим. Сейчас проверил в GHCi, уходит в бесконечный цикл, видимо при конструировании тоже seq там
Vladislav
Ну я вот так попробовал: Prelude> data List a = Nil | Cons !a !(List a) Prelude> repeat a = let x = Cons a x in x
Vladislav
Оно видимо вставил seq x и сломалось
Vladislav
repeat () циклится
Theta
Чтобы ты это сказал.
да, но упора как-то не было на бескончность. соответственно я подумал о реализации для хранения некоторой конечной структуры данных... ну ок, возможно и недопонимание вышло.
Theta
И в контексте данного вопроса, в чём ещё?
Theta
В заглушке в виде undefined?
Oleg
в любом боттоме
Theta
Никто не говорит об эквивалентности строгого и нестрогого
Theta
и не говорил
Theta
что делает всё же несколько бессмысленным вопрос
Theta
в любом боттоме
ну про боттом я уже итак сказал... назвав заглушками undefined
Theta
из-за аналогии...
Oleg
есть боттомы помимо бесконечной рекурсии и undefined
Theta
ну извините, https://wiki.haskell.org/Bottom
Theta
да как бы не за что, но ведь undefined это заглушка, которая возвращает bottom. Невычисленный конец
Oleg
есть боттомы помимо бесконечной рекурсии и undefined
Vladislav
есть боттомы помимо бесконечной рекурсии и undefined
Какие? Я могу назвать только бесконечную непродуктивную рекурсию и imprecise exceptions (= undefined и другие вызовы throw)
Vladislav
error это вызов throw, так что из той же серии
Vladislav
undefined = error "Prelude: undefined" error s = throw (ErrorCall s) примерно
Alexander
списки конечно можно сделать строгими, но с ними будет все плохо - достаточно бесполезная структура
Theta
Ну допустим неправильно сказал "заглушка undefined" замените на bottom
Alexander
на пустом месте получим увеличение сложности и необходимость костылей
Alexander
пример длинного поста на тему https://gist.github.com/klapaucius/1405389
Vladislav
@qnikst скажи, так возможно сделать tie the knot со строгим списком? Теоретически не вижу причин почему, т.к. в repeat 1 и голова и хвост могут быть в WHNF, но на практике не вышло
Alexander
сейчас попробую
Theta
и это очевидно, что это ключевое отличие строгого от ленивого и делает реализации неэквивалентными, однако судя по тому, что вопрос был, можно ли реализовать что либо вообще строго, соответственно, допускаются некоторые отклонения от эквивалентности
Theta
почему бы и не допустить, что кроме отсутствия боттома допускаем отсутствие бесконечности?
Alexander
судя по ответу интервьюверов близок к тому, про что они хотели поговорить
Oleg
Короче, нет. Не вышло. Не оправдан. Собес провалил не зр.
Oleg
почему бы и не допустить, что кроме отсутствия боттома допускаем отсутствие бесконечности?
За эти слова тебя сразу низвергают до скалиста, и ты идёшь собеседоваться ко мне
Alexander
@int_index у меня не получилось, даже с irrefutable patterns
Theta
судя по ответу интервьюверов близок к тому, про что они хотели поговорить
не, как-то замяли и перешли к куче других вопросов. Про костыли и неудобства вопросов не возникало, было сразу сказанно что невозможно O_o
Alexander
ну это будет список строго меньший по возможностям
Alexander
т.е. если они хотят бесконечные списки - так не сделать со строгим
Theta
Ну это само собой))
Theta
Собственно, кто захочет бесконечный строгий тип?
Alexander
точнее создать то можно
Alexander
а вот с использованием выйдет проблемка
Theta
Ну... конечные сообщения хранить в нём можно же будет, разве нет?
Theta
какая-нибудь конечная надпись...
Vladislav
Текст вообще не надо списком представлять, на этом можно и закончить
Vladislav
Есть строгий Text
Alexander
как не control structure у списка не много применений, хотя вон в окасаки было
Theta
Его ответ> « вычисление должно происходить до WHNF (примитивные типы вычисляются сразу, рекурсивные - до первого конструктора, в данном случае (:!) ) » И... я так и не понял, что мешает начать проводить вычисления с конца?
Alexander
что значит "с конца" ?
Theta
то есть с самого nil, дальше следующий cons, следующий cons и так далее...
Theta
до последней головы
Alexander
ну ты должен их пройти и сформировать