나는이 간단한 Expr AST를 가지고 있으며 쉽게 String으로 변환 할 수 있습니다. import Prelude hiding (Foldable)
import qualified Prelude
import Data.Foldable as F
import Data.Functor.Foldable
import Data.Monoid
import Contr
나는 catamorphism의 일반화 된 재귀 스키마를 '발명했습니다'. {-# LANGUAGE DeriveFunctor #-}
import qualified Data.Map as M
newtype Fix f = Fix { unFix :: f (Fix f) }
cata :: Functor f => (f b -> b) -> Fix f -> b
ca
Scalaz는 Boolean, Option[_], Validation[_, _], Either[_, _] 등과 같이 다양한 ADT에 대해 fold이라는 메서드를 제공합니다.이 메서드는 기본적으로 주어진 ADT에 대한 모든 가능한 경우에 해당하는 함수를 사용합니다. 즉, 패턴 매칭이 아래 : x.fold(f, g, ..., z)
일부 예 : x match
정말 일반적인 방법으로 catamorphisms/anamorphisms 작업의 생각처럼,하지만 그것은 상당한 성능 단점이있다 나에게 보인다 가정 해 우리는 무조건적인 방법으로 트리 구조 작업 할이 - 설명하는 사용하여 다른 접이식 일반적인 catamorphism function : newtype Fix f = Fix { unfix :: f (Fix f) }
다음 코드에서 cataM을 트리 하향식으로 트래버스하는 것이 가능합니다 (현재 상향식이 아닌 상향식이 아닌 방법). 는 내가 다른 foldMap를 구현해야합니다 생각하지만, 아이들이 t의 더 예를하지 않았다있는 방법 branch 이후 어린이 전에 branch 노드 자체를 처리하는 방법을? 당신은 또한 마트 료가 제공하는 기능 topDownCataM을 찾고있
n-ary Tree 데이터 구조를 폴드하고 싶습니다. 내가 일하는 해결책을 마련하기 위해 관리 (배는 집계는 Linq에에 일명입니다) : public static R Aggregate<T, R>(T node,
Func<T, IEnumerable<T>> getChildren,
Func<T, IEnumerable<R>, R> aggreg