Misha
Зигохистоморфный
@kana_sama
что знаю из последнего
https://github.com/Lysxia/generic-recursion-schemes
https://github.com/frerich/catamorphism
кана
Зигохистоморфный
кана
нет, именно кату
кана
ну там было более специализированное утверждение "через foldr/reduceRight можно выразить все для работы со списком"
Mi Shа
Подскажите, а как называют софт для тестирования алгоритмов на правильность ( например, для соревновательного программирования )?
И есть ли что-то подобное на Хаскелле?
Alexander
Alexander
на хаскеле есть hspec, например
Зигохистоморфный
кана
например если мы сворачиваем в пару для стейта, а вернуть нужно первый элемент пары
Зигохистоморфный
кана
как
кана
в трансдьюсерах типа сделали для этого финализирующую функцию с одним аргументов, которая вызывается в конце
кана
какая альтернатива у алгебр?
Зигохистоморфный
f . foldr g a = foldr h b, where f a = b, f (g x y) = h x (f y)
кана
в том, что не подходит под утверждение "одной катой выразить все"
Зигохистоморфный
ну если f работает со скаляром каким-то, то ничего плохого не вижу, а так в другом случае можно алгебры складывать и компоузить как естественные преобразования
кана
да речь не в "плохое/хорошее"
кана
а собственно в корректности утверждения
Зигохистоморфный
@kana_sama если f что-то сродни катаморфизма и ее можно выразить через него, то тогда можно зафьюзить 2 алгебры в одну и заюзать катаморфизм только один
Alexander
Откуда вы все это знаете :/
Andrey
простите что вмешиваюсь в умные темы, напомните плиз, а filter у нас не генерализован каким-нибудь классом типов?
Andrey
и если нет то почему?
Зигохистоморфный
Зигохистоморфный
и еще
https://hackage.haskell.org/package/compactable-0.1.2.2/docs/Control-Compactable.html
Andrey
ага, оно. просто подумалось что почему бы ему не быть, и как всегда в сабже оно уже есть
Зигохистоморфный
ну и mfilter из Control.Monad
Зигохистоморфный
в purescript они объединили несколько идей
https://github.com/LiamGoodacre/purescript-filterable
Зигохистоморфный
еще есть
http://hackage.haskell.org/package/filtrable-0.1.0.2/docs/Data-Filtrable.html
но мне по душе, как в пурсе сделано
Ilya
Типа f . foldr (:) [] и всё (поправлено)
Ilya
Зигохистоморфный
Alexander
Ilya
что-то не то с этим rewrite rule, кмк
Anonymous
@Readonlys будет жить. Поприветствуем!
кана
я вижу это невозможным без read например
Ilya
Не во всех случаях оно разрешимо
Alexander
а у нас не появилось в современном Haskell возможности выбора по какой типопеременной траверс делать?
Alexander
скажем у меня есть:
data Foo a b = Foo a | Bar b | Baz Q
я хочу сделать traverse ioA2C >=> traverse ioB2D :: Foo A B -> IO (Foo C D)
A64m
в generic-lens есть
Зигохистоморфный
traverse @SomeType ioA2C >=> traverse @SomeType2 ioB2D мб как-то так
Alexander
@A64m_qb0 а где там?
Alexander
A64m
param @1
Зигохистоморфный
не взлетит же это
ну ты подставь правильно) я просто как пример написать, юзать TypeApplications
Alexander
TypeApplication же не взлетит
Alexander
@A64m_qb0 так param @1 сделает мне правильный Traversal, а как мне теперь его "запустить"?
A64m
?
Alexander
traverseOf (param @1) function foo ?
Alexander
так как-то?
Alexander
@A64m_qb0 ^
A64m
не понял, зачем тут траверсоф
Alexander
у меня есть Foo A B, хочу сделать IO (Foo C D) пройдясь (A -> IO C) и (B -> IO D)
Alexander
или я тут туплю в ночи?
A64m
traverseOf = id
Alexander
а
Alexander
понял
A64m
param @1 и будет вместо traverse
Alexander
понял
Alexander
а если у меня больше вложенность Baz (Foo A B) -> IO (Bar (Foo C D)) ?
A64m
в Baz зайти сначала
Alexander
traverse ( (param @1) foo) ?
Alexander
теперь осталось понять хочу ли я этого всего
Alexander
но хотя бы идею понял
A64m
(traverse . param @1) f foo
Alexander
+
Alexander
поидее наиболее правильное решение у меня если есть зависимость от контекста, но тогда уже не получится так
Alexander
сейчас попробую по человечески написать:
Alexander
data Bar a = Bar U V a
data Baz q b = BazL q | BazR b | Baz
type Q = Bar (Baz K L)
f :: U -> V -> K -> IO Щ
g :: U -> V -> L -> IO Ц
magic :: Q -> IO (Bar (Barz Щ Ц)
Alexander
@A64m_qb0 ^