parket
Что за _blah? :)
Pavel
parket
👍 Спасибо!
Cheese
Что за _blah? :)
всё есть в ссылках же https://ruhaskell.org/links.html
Alexander
о, stack в полезных ссылках
parket
всё есть в ссылках же https://ruhaskell.org/links.html
Я не знал, что у нас сайтец есть, со ссылками. Спасибо.
Cheese
Я не знал, что у нас сайтец есть, со ссылками. Спасибо.
ещё у этого чата есть закреплённое сообщение
Евгений
Надо закрепить информацию о закреплённом сообщении
Cheese
нет, я не упрекаю, просто подсказываю, как можно быстрее находить ответы
Евгений
только одно можно
Оно просто рекурсивным будет
Alexander
@elemir90 так?
Евгений
Надо тогда уж первым предложением
Alexander
тогда не хвостовая рекурсия
Alexander
rec = rec » info а тут rec = info » rec
Alexander
оно конечно бесмысленно
Евгений
тогда не хвостовая рекурсия
Согласен, но тут дискуссионный вопрос о порядке вычислений в тексте
A64m
> nofib shows only small differences of about +/- ~0.5% > containers: ~1.5% faster > aeson: ~2% faster > megaparsec: ~2-5% faster > xml library benchmarks: 0.2%-1.1% faster > vector-benchmarks: 1-4% faster > text: 5.5% faster КЛАССИКА НОФИБА
Anonymous
@uhbif19 будет жить. Поприветствуем!
kosc
Dratuti!
Сергей
странное для себя встретил: -- | Hylomorphism is anamorphism followed by catamorphism. hylo :: Functor f => (f b -> b) -> (a -> f a) -> (a -> b) hylo phi psi = cata phi . ana psi откуда тут берётся тип b, Как вообще они композируются если выход ana - f b, а вход cata - f a ? http://hackage.haskell.org/package/data-fix-0.2.0/docs/Data-Fix.html
Ilya
ana строит Fix f, а используется как seed, но в результате его нет
Ilya
cata сворачивает Fix f в b
Ilya
композируются-то не алгебра и ко-алгебра, а ana psi :: a -> Fix f и cata phi :: Fix f -> b
Сергей
да, но всё равно не ясно. Тип точки никуда не делся: λ :t (.) (.) :: (b -> c) -> (a -> b) -> a -> c тут b должно быть одинаковым. А! всё, увидел, да, композируются не (a -> f a), (b -> f b)
Ilya
*deleted*
ну, положим, forall там на самом верху
Сергей
да, щёлкнуло
кана
psi :: Int -> Maybe Int psi n | n > 0 = Just (n - 1) psi _ = Nothing phi :: Maybe String -> String phi Nothiing = "Z" phi (Just x) = "S(" ++ x ++ ")" cata phi :: Fix Maybe -> String ana psi :: Int -> Fix Maybe f :: Int -> String f :: cata phi . ana psi f 3 == "S(S(S(Z)))" далее очевидно
кана
Опоздал
Сергей
Спасибо!
Ilya
А пара и апо морфизмы нафига нужны?
Зигохистоморфный
А пара и апо морфизмы нафига нужны?
апоморфизм - анаморфизм для непустых структур, например для NonEmpty (тут надо самому строить условие) параморфизм - катаморфизм, который параллельно несет информацию о оригинальной структуре
Зигохистоморфный
например dropWhile ты не напишешь с cata
Зигохистоморфный
ну и инсерт не сделать через ana
кана
Хм, оригинальной или остаточной?
Зигохистоморфный
Зигохистоморфный
catamorphism - общая модель структурной рекурсии anamorphism - общая модель структурной корекурсии paramorphism - общая модель примитивной рекурсии apomorhism - общая модель примитивной корекурсии в para - Tuple в apo - Either что тоже дуализмы
Зигохистоморфный
cata :: Functor f => (f b -> b) -> Fix f -> b ana :: Functor f => (a -> f a) -> a -> Fix f para :: Functor f => (f (Fix f, c) -> c) -> Fix f -> c apo :: Functor f => (b -> f (Either (Fix f) b)) -> b -> Fix f в apo Left ведеть себя также как и в https://www.stackage.org/haddock/lts-12.8/extra-1.6.9/Control-Monad-Extra.html#v:loop
Зигохистоморфный
кстати как вариант, попробуйте написать через ana toList :: forall a. RoseTree a -> [a] ну перед этим представив RoseTree через Fix
Ilya
Я писал помню, для разных вариантов обхода
Ilya
Хотя подожди, зачем тут вообще RoseTree через фикс представлять?
Зигохистоморфный
Через unfoldr то как раз легко
Как выглядит твое дерево? Это не пустая структура как и nonemptylist
Ilya
ana должна билдить структуру, у тебя на выходе список, значит речь идёт об ana для списка, то есть unfoldr
Ilya
Значит не имеет смысла RoseTree переписывать через Fix, функтор для ana тут ListF, а не RoseTreeF
Зигохистоморфный
Ты потеряешь один элемент из дерева
Ilya
Ладно, я писал не для Tree a, я писал для Forest a
Ilya
Вспомнил
Ilya
Что практически одно и то же, но Forest a может быть пустым, да:)
Ilya
Forest который отсюда http://hackage.haskell.org/package/containers-0.6.0.1/docs/Data-Tree.html
Ilya
Ana не развернет непустую структуру в пустую
toList :: Tree a -> [a] toList (Node a ts) = a : unfoldr f ts Вот в таком виде короче можно сделать. Но это не чистая ana, да
кана
а то вроде ана, а функтор на вход
Зигохистоморфный
кана
toList :: Fix (RoseTreeF a) -> [a] то есть мы принимаем фикс на вход по заданию, а ана отдает, собственно про это я и спросил, мол мб ты имеешь в виду ану для списка
Зигохистоморфный
нет же
Зигохистоморфный
свернуть RoseTree в список через анаморфизм
кана
ты не понял вопрос
кана
ana :: Functor f => (a -> f a) -> a -> Fix f
кана
какой F ты хочешь увидеть в решении?
Ilya
Просто лишняя была добавка "представьте RoseTree через Fix"
кана
да, это запутывает
кана
типа на самом деле реализация RoseTree вообще не важна задача оказывается
Зигохистоморфный
Просто лишняя была добавка "представьте RoseTree через Fix"
догадываешься на каком условии мы теряем элемент?
Зигохистоморфный
ты на вопрос мне ответишь?
как будет выглядеть твоя коалгебра?
кана
не отвечай вопросом на вопрос, я сейчас не решение генерю, а УСЛОВИЕ хочу понять
Зигохистоморфный
не отвечай вопросом на вопрос, я сейчас не решение генерю, а УСЛОВИЕ хочу понять
хорошо, сверни древо розовых кустов в список (через анаморфизм сначала попробуй)
кана
потому что в условии ты сказал про розтри через фикс, что подразумевает, что мы должны работать с функтором RoseTreeF но потом ты говоришь про ану, которая генерит структуру, а сгенерить нужно список
кана
то есть я так понимаю ты хочешь ListF в качестве функтора для аны, а не ReseTreeF
Зигохистоморфный
RoseTree a -> ListF a (RoseTree a)
кана
тогда зачем вообще было нужно уточнение про фикс?
кана
что фикс меняет тут?
кана
для дерева