我想寫Foldable.toList一個非空的玫瑰樹使用anamorphism,但似乎無法提取的最後一個元素: import Data.Functor.Foldable
data RoseTree a = RoseNode a [RoseTree a]
ana5 :: RoseTree a -> [a]
ana5 = ana coalg5
coalg5 :: RoseTree a -
有Fibonacci數列表的優雅derinition: fibs :: [Integer]
fibs = fib 1 1 where
fib a b = a : fib b (a + b)
能說是使用recursion-schemes庫? 我能得到的最接近的是採用完全不同的方法下面的代碼: fibN' :: Nat -> Integer
fibN' = histo $ \case
在埃德Kmett的recursion-scheme包修復,木,怒江之間的差異,有三個聲明: newtype Fix f = Fix (f (Fix f))
newtype Mu f = Mu (forall a. (f a -> a) -> a)
data Nu f where
Nu :: (a -> f a) -> a -> Nu f
是什麼這三種數據類型之間的區別?
我具有表示算術表達式數據類型: data E = Add E E | Mul E E | Var String
我想要寫的擴展功能,這將表達式轉換成的變量乘積之和(排序的牙套擴張)。當然使用遞歸方案。 我只能想到一個算法本着「進步與保存」的精神。每個步驟的算法構造完全展開的術語,因此不需要重新檢查。 的Mul的處理讓我瘋了,所以不是做直接我用了一個同構型的[[String]]並代爲concat