Uniplate для рекурсивных данных
Feb. 8th, 2010 10:16 amАналог uniplate, не зацикливающийся на рекурсивных данных. На основе кода
permea_kra (спасибо!).
Код на hpaste (отсюда)
Пример использования
Работаем...
Ключевые слова: SYB, StableName, unsafePerformIO
Код на 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 _ <- recUniplate testRose] [1,2,3]
Ключевые слова: SYB, StableName, unsafePerformIO
no subject
Date: 2010-02-08 07:24 am (UTC)58030 5: database is locked
no subject
Date: 2010-02-08 07:26 am (UTC)no subject
Date: 2010-02-08 07:30 am (UTC)no subject
Date: 2010-02-08 07:31 am (UTC)no subject
Date: 2010-02-08 11:45 am (UTC)case cast v of Just v0 -> (v0:) `fmap` continue Nothing -> continueэто случайно не?no subject
Date: 2010-02-08 01:04 pm (UTC)Задача - есть направленный циклический граф, узлы которого могут быть разного типа. Нужно, начиная с определённого узла (типа А) вытащить все узлы типа Б, до которых можно дойти из начального узла. Нужно, чтобы в выборке узлы не повторялись.
Такое foldr не позволяет.
no subject
Date: 2010-02-08 01:27 pm (UTC)no subject
Date: 2010-02-08 01:36 pm (UTC)