Alexander
threaded haskell работает в nix в linux subsystem в windows
Кабачок
Но он не знает ничего кроме... э... слов?
Кабачок
(@qnikst про аутиную типизацию ты удалил?)
Alexander
ytn
Alexander
нет конечно
Alexander
я даже не читаю чо мы там про типизации пишите
Alexander
ну и это бы не трогал точно
Anatoly
сорри за вопрос новичка: почему haskell не диагностирует незавершаемые выражения? например, x = x + 1 x -- overflow ?
Vasiliy
потому что в общем случае это невозможно
Misha
Потому что в общем случае эта задача неразрешима, но есть liquid haskell, который умеет что-то похожее.
Anatoly
спасибо!
кана
Траверсалы выглядят как функторы для линз, только ограниченее.
Alexander
@anatolijs например x = 1:x
Alexander
это незавершаемая или завершаемая операция?
Anatoly
это конструирование бесконечного списка
Anatoly
если она будет вызвана, то не завершится
Aleksei (astynax)
в хаскеле - завершится
Alexander
а take 10 x?
Aleksei (astynax)
ибо лень
Anatoly
Anatoly
а take 10 x?
да, я понял
Aleksei (astynax)
length [1..] тоже не завершится :)
Anatoly
не смотря на бесконечное выполнение в некоторых контекстах, в данном случае все будет в порядке
Alexander
не знаю, что такое бесконечное выполнение
Alexander
то, что было бы бесконечным выполнением если нету шаринга или лени?
Anatoly
я пока не могу понять, как он делает так, что take 10 x завершается
Aleksei (astynax)
я пока не могу понять, как он делает так, что take 10 x завершается
take идет по ленивому списку, который создаёт элементы по требованию. Как только take говорит "хватит", список генериться перестает
Cheese
я пока не могу понять, как он делает так, что take 10 x завершается
потому что нет причин ему работать бесконечно
Anatoly
круто, спасибо!
Alexander
есть ещё более интересный вариант: any [ a^n + b^n == c^n | a <- [1..], b <- [1..], c<-[1..], n<-[1..]]
Aleksei (astynax)
Хаскель всё вычисляет только тогда, когда это действительно нужно
Alexander
это завершается или нет?
Alexander
только transpose для аргументов сделать, чтобы более разумно по ним бегал
Alexander
вообще есть такая проблема останова
Alexander
и мы или выкинем кучу программ для которых доказыать не умеем или возьмем не тьюринг полный язык, который не позволит получить незавершаемость
Кабачок
что есть структурная?
кажется я только что придумал новый термин. но вообще это как записи в млях работают, даже статья в вики есть https://en.wikipedia.org/wiki/Structural_type_system
Anatoly
причем, haskell не допускает левую рекурсию при определении бесконечных последовательностей, что понятно y = y : 1 — не скомпилируется
Зигохистоморфный
А как ты пытаешься сделать 1 хвостом?
Кабачок
+
Alexander
нет
Зигохистоморфный
Так оператор просто не работает
Alexander
тут типы тупо не сходятся
Alexander
let y = y++[1]
Alexander
пожалуйста
Anatoly
точно, спасибо!
Ilya
это завершается или нет?
Конечно:) При таком-то диапазоне на n
Кабачок
Правда тут уже take работать не будет afaik
Зигохистоморфный
Конкатенация слишком прожорливая штука
Alexander
хорошая шутка
Aleksei (astynax)
Конкатенация слишком прожорливая штука
лень же - дёшево конкатенировать, просто будет +1 санк :)
Зигохистоморфный
Ну как бы надо полностью пройти 1 и потом хвостом подсоединить второй
Alexander
вы же не про пример выше?
Зигохистоморфный
А что если это два бесконечных списка?
Aleksei (astynax)
Ты не поверишь: λ> take 10 $ [1..] ++ [1..] [1,2,3,4,5,6,7,8,9,10]
Aleksei (astynax)
конкатенация - тоже ленивая, начинает отдавать новый список поэлементно
kosc
Ты не поверишь: λ> take 10 $ [1..] ++ [1..] [1,2,3,4,5,6,7,8,9,10]
Слушайте, а где это приглашенька такая у интерпретатора? А то в ghci по дефолту вроде как просто написано "Prelude>"
Aleksei (astynax)
в .ghci
kosc
Это конфиг всмысле?
Aleksei (astynax)
:set prompt "\ESC[32mλ> \ESC[m"
Aleksei (astynax)
можно прямо в репле попробовать
kosc
Ага, работает.
kosc
Спс.
Зигохистоморфный
Да, но не будет видно что за модули ты уже подключил
Aleksei (astynax)
это можно узнать и по-другому
Aleksei (astynax)
:show modules
Anatoly
Ты не поверишь: λ> take 10 $ [1..] ++ [1..] [1,2,3,4,5,6,7,8,9,10]
но в данном случае до ++ [1..] просто никогда не дойдет
Aleksei (astynax)
Вопрос был про завершение и про дороговизну конкатенации :)
Aleksei (astynax)
Так что в хаскеле конкатенация - сравнительно дешевая
кана
Чет у меня получился какой-то сложный toListOf toListOf :: Optic (->) (K (Endo [a])) s s a a -> (s -> [a]) toListOf lens = flip appEndo [] . getK . lens (K . Endo . (<>) . (:[]))
Зигохистоморфный
Нужен foldOf или как его там)
Зигохистоморфный
Вернее foldrOf
кана
я кату делаю твою, тут нет никаких фолдофов
Leonid 🦇
кату?
кана
https://www.codewars.com/kata/lensmaker/train/haskell
кана
вот тут меня еще гложат сомнения elements :: T.Traversable f => Traversal (f a) (f b) a b elements = traverse в сорцах либы там тоже фолдоф (или елементсОф), но зачем - хз
кана
Как часто вы используете coerce? Выглядит полезным при оптимизации, но нужно серьезно жертвовать читаемостью и понимаемостью кода имхо