Theta
вот вот
Vladislav
Но очевидно не с хвостом списка
Vladislav
Т.к. он рекурсивный
Theta
Что? Конечный определённый хвост разве не строг?
Vladislav
Он строг, но не unpacked
Oleg
и мы не про примеры говорили
я имел в виду пример АДТ, который не может быть определён через конструкторы, требующий whnf от каждого аргумента
Theta
А, ну про распаковку не говорили
Theta
Theta
без всяких бесконечностей
Theta
O_o
Oleg
И стрикт лист, его область значений меньше, чем у прелюдного. Именно на множество вот тех бесконечных списков. Так что это не совсем "аналог"
Theta
А... то есть список юез nil....
data Stream a = Cons a (Stream a)
окей, но там было с nil... либо тотальное недопонимание возникло друг друга
Theta
ну такой бесконечный список конечно да, не может
Theta
но строка это эе конечный список
Theta
стандартный
Oleg
Oleg
Theta
Theta
Не обязательно
Но с другой стороны очевидно что бесконечная структура и не может быть строгой
Theta
в чём суть вопроса тогда?
Theta
Конечные строки могут быть строгими
Theta
Либо недопониание, либо запутывание какое-то T_T
Theta
Ещё до этого перепутал с трансформерами... правда признал за собой косяк
Oleg
Vladislav
Я кстати ошибся про то, что tie the knot можно сделать строгим. Сейчас проверил в GHCi, уходит в бесконечный цикл, видимо при конструировании тоже seq там
Oleg
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
Чтобы ты это сказал.
да, но упора как-то не было на бескончность. соответственно я подумал о реализации для хранения некоторой конечной структуры данных... ну ок, возможно и недопонимание вышло.
Oleg
Theta
И в контексте данного вопроса, в чём ещё?
Theta
В заглушке в виде undefined?
Oleg
в любом боттоме
Theta
Никто не говорит об эквивалентности строгого и нестрогого
Theta
и не говорил
Theta
что делает всё же несколько бессмысленным вопрос
Oleg
Theta
в любом боттоме
ну про боттом я уже итак сказал... назвав заглушками undefined
Theta
из-за аналогии...
Oleg
есть боттомы помимо бесконечной рекурсии и undefined
Theta
ну извините, https://wiki.haskell.org/Bottom
Oleg
Theta
да как бы не за что, но ведь undefined это заглушка, которая возвращает bottom. Невычисленный конец
Oleg
есть боттомы помимо бесконечной рекурсии и undefined
Oleg
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
почему бы и не допустить, что кроме отсутствия боттома допускаем отсутствие бесконечности?
Theta
Alexander
судя по ответу интервьюверов близок к тому, про что они хотели поговорить
Oleg
Короче, нет. Не вышло. Не оправдан. Собес провалил не зр.
Oleg
Alexander
@int_index у меня не получилось, даже с irrefutable patterns
Alexander
ну это будет список строго меньший по возможностям
Alexander
т.е. если они хотят бесконечные списки - так не сделать со строгим
Theta
Ну это само собой))
Theta
Собственно, кто захочет бесконечный строгий тип?
Alexander
точнее создать то можно
Alexander
а вот с использованием выйдет проблемка
Theta
Ну... конечные сообщения хранить в нём можно же будет, разве нет?
Theta
какая-нибудь конечная надпись...
Vladislav
Текст вообще не надо списком представлять, на этом можно и закончить
Vladislav
Есть строгий Text
Alexander
как не control structure у списка не много применений, хотя вон в окасаки было
Theta
Его ответ>
«
вычисление должно происходить до WHNF (примитивные типы вычисляются сразу, рекурсивные - до первого конструктора, в данном случае (:!) )
»
И... я так и не понял, что мешает начать проводить вычисления с конца?
Alexander
что значит "с конца" ?
Theta
то есть с самого nil, дальше следующий cons, следующий cons и так далее...
Theta
до последней головы
Alexander
ну ты должен их пройти и сформировать