Аналог uniplate, не зацикливающийся на рекурсивных данных. На основе
кода permea_kra (спасибо!).
Код на hpaste (
отсюда)
Пример использования
data Rose = Rose { roseId :: Int, roses :: [Rose] }
deriving (Data,Typeable)
testRose = let
a = Rose 1 [b,c]
b = Rose 2 [a,c]
c = Rose 3 [a,b]
in a
Работаем...
> [id | Rose id _ <-
(
Read more... )
Comments 8
58030 5: database is locked
Reply
Reply
Reply
Reply
case cast v of
Just v0 -> (v0:) `fmap` continue
Nothing -> continueэто случайно не
Data.Foldable.foldr (\v0 -> fmap (v0:)) continue v?
Reply
Задача - есть направленный циклический граф, узлы которого могут быть разного типа. Нужно, начиная с определённого узла (типа А) вытащить все узлы типа Б, до которых можно дойти из начального узла. Нужно, чтобы в выборке узлы не повторялись.
complexStructure :: A
allB :: [B]
allB = universeRec complexStructure
Такое foldr не позволяет.
Reply
Reply
\v -> foldr (\v0::a -> fmap (v0:)) continue v :: t a -> f a
\v -> case ... :: t -> [a]
Reply
Leave a comment