recursion-schemes

    6熱度

    1回答

    我想寫Foldable.toList一個非空的玫瑰樹使用anamorphism,但似乎無法提取的最後一個元素: import Data.Functor.Foldable data RoseTree a = RoseNode a [RoseTree a] ana5 :: RoseTree a -> [a] ana5 = ana coalg5 coalg5 :: RoseTree a -

    1熱度

    1回答

    如果我有一個值a: Free[Op, A],是否有可能「扁平化」a的結構,以便兩個由自由monad綁定在一起的Op可以合併爲一個? 上下文:我想在解釋之前將其作爲優化步驟執行,因爲Op的語義是其操作是冪等的。因此,如果兩個「連續」出現,第二個可以免費獲得該程序的語義。

    4熱度

    1回答

    給定具有固定點的任意數據結構,我們可以構造一個monoidal代數而無需手動指定所有情況嗎? 假設我們得到如下的數據類型Expr。使用庫,我們可以派生出一個基函數ExprF,它自動也有Functor,Foldable和Traversable實例。 {-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-} {-# LANGU

    2熱度

    1回答

    我寫了一個小程序,以找到一個數的因式分解。一切似乎除了main功能,抱怨不能夠找到一個Show1實例進行編譯。 {-# LANGUAGE DeriveFunctor #-} module FactorAnamorphism where import Data.Functor.Foldable import Data.List nextPrimeFactor :: Integer ->

    1熱度

    1回答

    在以下代碼中,如何讓cataM自上而下遍歷樹(而不是像現在這樣是自下而上的)? 我想我應該實現foldMap不同,但因爲branch如何給孩子之前處理branch節點本身沒有t實例,它兒都沒有? module Catatree where import Data.Foldable import Data.Traversable import Data.Monoid import Data

    3熱度

    2回答

    有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

    12熱度

    1回答

    在埃德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 是什麼這三種數據類型之間的區別?

    2熱度

    2回答

    我具有表示算術表達式數據類型: data E = Add E E | Mul E E | Var String 我想要寫的擴展功能,這將表達式轉換成的變量乘積之和(排序的牙套擴張)。當然使用遞歸方案。 我只能想到一個算法本着「進步與保存」的精神。每個步驟的算法構造完全展開的術語,因此不需要重新檢查。 的Mul的處理讓我瘋了,所以不是做直接我用了一個同構型的[[String]]並代爲concat

    2熱度

    2回答

    我在Haskell中有更高階函數的作業,我在入門時遇到了一些麻煩。 如果我能在第一個問題上得到一些幫助和解釋,我相信我能完成其餘的工作。 使用高階函數(map,fold,或filter),並在必要時 lambda表達式,寫功能f1和f2這樣f1 (f2 (*) [1,2,3,4]) 5 ~> [5,10,15,20] f1 = f2 = 我想我必須使用部分應用map,以便[1,2,3,4]變

    4熱度

    2回答

    我使用recursion-schemes庫下面的代碼: {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TypeFamilies #-} import Data.Functor.Foldable import Data.Maybe import qualified Data.Map as M reduceBy valueAlgebra keyFn =