кана
я сегодня ретвитил про 200KLOC эльма в год
и это ни о чем, много бойлерплейта, 3 строки отступа на строку кода
Leonid 🦇
Вот у @voidlizard терпения то сколько.
Denis
Dmitry
Я на этой неделе менеджер, мне можно
Dmitry
На следующей может опять код писать буду
Denis
я тоже, но я на работе терпение оставляю
Denis
На следующей может опять код писать буду
нет ничего постояннее синусоиды, типа?
Denis
неделя тут, неделя там
Denis
@lonokhov я с растоканала заржал. 9/10
Leonid 🦇
Надо ещё фри монады притянуть
Dmitry
@catamorphism не, мне просто теперь недели хватает, что бы переключиться
Dmitry
Раньше месяц нужен был
anton
Кстати, в фримонадах там не эффективно они строятся, там проблемы с байндом в простой оригинальной реализации, на тайпклассах все же лучше, если несколько интерпретаций хочется
Denis
Это Control.Monad.Free.Church решает
Denis
емнип
anton
И патерн матчинг он не совместим с edsl, ведь значений нет, это же синтаксич деревья все
Зигохистоморфный
Это Control.Monad.Free.Church решает
это таже ситуация что и со списком, DList как раз похожую задачу решает, только для списков
Denis
список это частный случай Free
Зигохистоморфный
знаем) плавали
Зигохистоморфный
DList это частный случай FreeChurch
Зигохистоморфный
хотя все это у Кметта есть в 3 статьях про фри монады
Denis
каким образом это частный случай?
Denis
F f a явно общее DList a
Denis
т.е. в другую сторону еще поверю
кана
паттерны в хаскеле это такие смарт-конструкторы с большой буквы?
кана
или их еще и метчить можно?
Denis
PatternSynonyms матчабельные
Зигохистоморфный
F f a явно общее DList a
тем, что DList можно выразить через type DList a = Codensity (Free ((,) a)) ()
Denis
Ну так это означает что то, что справа - более общее. Т.к. инстанциируя это с другими функторами, получается больше вариаций.
Denis
http://prntscr.com/ibh8ak
Denis
> edited
Denis
там до этого наоборот было написано 😜
Зигохистоморфный
Зигохистоморфный
потерял направление текста)
Denis
> ну я и сказал ну и брехло )
Зигохистоморфный
интересно так можно? newtype Rec f r = MkRec { unRec :: (f r -> r) -> r } newtype Rec' f = MkRec' { unRec' :: forall r. (f r -> r) -> r }
Зигохистоморфный
будет ли так равнозначно?
Denis
не равнозначно
кана
второй требует полиморфную по r функцию, а первый специализированную, которую составить намного проще (то есть потенциально и тип более населен)
Зигохистоморфный
ну это понятно
Зигохистоморфный
интересно можно их свести к изоморфности?
кана
ну нет, я же сказал, что второй потенциально более населен, какая изоморфность
кана
вот Rec' f и Rec'' f = forall r. Rec f r возможно можно свести, но не факт
кана
да, PatternSynonyms интересный, но чет странно пахнет
Зигохистоморфный
я заметил одно, часто подход с CPS убирает квадратичную сложность
Зигохистоморфный
все потому что Church рулит)
Anatolii
все потому что Church рулит)
а где про черч энкодинг почитать можно?
Denis
это не тот черч энкодинг что на слуху
Anatolii
а можно поробнее?
Anatolii
Гонзалез где-то писал что черч энкодинг прямо обязательно понять. Но где почтитаь не сказал
Anatolii
какую-то ссылочку может киньте
Anatolii
или название пейпера может
Denis
http://programmable.computer/posts/church_encoding.html я подозреваю что гонзалез про лямбда-термы мог писать черч-энкоднутые
кана
в моем представлении черч-энкодинг это adt на лямбдах (а для работы со значенем свертки), а мне тут на функторах что-то кидали
Зигохистоморфный
так ведь все можно заэнкодить в черче
кана
о, да, то что выше
кана
типа -- adt data Tree a = Leaf a | Node (Tree a) a (Tree a) -- church type Tree a = forall c. (a -> c) -> (c -> a -> c -> c) -> c leaf :: a -> Tree a leaf := \x foldLeaf foldNode -> foldLeaf x node :: Tree a -> a -> Tree a -> Tree a node := \l x r foldLeaf foldNode -> foldNode (l foldLeaf foldNode) x (r foldLeaf foldNode) foldTree :: (a -> c) -> (c -> a -> c -> c) -> Tree a -> c foldTree foldLeaf foldNode x = x foldLeaf foldNode
Зигохистоморфный
кана
все, что я выше написал, я и считал черч-энкодингом
Зигохистоморфный
newtype TreeC a = TreeC { runTree :: forall r. r -> (r -> a -> r -> r) -> r } deriving Functor
Зигохистоморфный
вот дерево в черче
кана
если сделать Leaf со значнием, то получится то же, что и у меня
кана
кстати, отсюда у меня давно уже вывод идет, что a) у foldов всегда редьюсер должен быть a -> b -> b, как у foldr b) начальное значение должно идти перед редьюсером, так как [] объявлен ранее :
Alexander
растоканал откуда начинать читать ? СС @catamorphism
Denis
@qnikst да там одна фраза была по большому счету
Alexander
ну тогда не найти уже
Denis
хорошо что так хайлайты не работают
Alexander
сильно повезло
Kirill
Подскажите, чем из xml-я (строка) по xpath-у/набору фильтров вытащить значение ноды?
Denis
hxt самое xpath-оподобное было. Мы dom-parser/xml-conduit юзаем.
Cheese
у меня xml-lens в петпроекте
Kirill
можно примерчики?)