<- toNormForm' f, c' <- toNormForm' f']
[[CDmd r c b] | c <- toNormForm' f]
через Data.Set, а не списки?
Ну или хотя бы не очень красиво, но как это обычно делают?
Set.fromList do foo <- bar pure setItemCandidate
у вас на входе Set и на выходе Set?
красивее компрехеншена уже не будет, но можно Set.fromList $ liftA2 (<>) (toList xs) (toList ys) а во втором случае хотите получить Set из одноэлементных Set?
да, что-то такое я и взял Comprehension'ы пока. А там будут проблемы с производительностью — буду менять. Пока главное, что наглядно и ошибку сложнее допустить
какие проблемы с производительностью вы ожидаете? если для этой задачи надо в любом случае перебирать все комбинации
а если забыть о синтаксисе и поговорить о производительности, то посмотрите на Data.Set.cartesianProduct. можно начать с Set.map (uncurry (<>)) $ cartesianProduct c c', а продолжить погружением в исходный код этой нетривиальной функции и проверкой применимости Set.mapMonotonic всё это делать, измеряя производительность с помощью criterion, например
ok сначала напишу как-нибудь, потом буду думать о производительности. А то тут пока и как-нибудь не очень выходит
так вы уже начали вопрос с достаточно хорошей реализации
Обсуждают сегодня