úÎ!MG&k      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij$Algebra, ColAlgebra, and other stuff(c) gspia 2020-BSDgspiaSafe -.HUVƒfcf-containersType-level Second. Tuples (,) and Either have Second-instances.Example%:kind! Eval (Second ((+) 1) '("a",3))2Eval (Second ((+) 1) '("a",3)) :: (TL.Symbol, Nat) = '("a", 4)fcf-containersType-level First. Tuples (,) and Either have First-instances.Example$:kind! Eval (First ((+) 1) '(3,"a"))1Eval (First ((+) 1) '(3,"a")) :: (Nat, TL.Symbol) = '(4, "a")fcf-containersHylomorphism uses first ( to build a structure (unfold) and then " to process the structure (fold).Example+data NToOneCoA :: CoAlgebra (ListF Nat) Nat:{% type instance Eval (NToOneCoA b) =  If (Eval (b < 1) ) 'NilF ('ConsF b ( b TL.- 1)):}%:kind! Eval (Hylo SumAlg NToOneCoA 5)%Eval (Hylo SumAlg NToOneCoA 5) :: Nat= 15fcf-containers Ana can also be used to build a  structure.Example+data NToOneCoA :: CoAlgebra (ListF Nat) Nat:{% type instance Eval (NToOneCoA b) =  If (Eval (b < 1) ) 'NilF ('ConsF b ( b TL.- 1)):}:kind! Eval (Ana NToOneCoA 3))Eval (Ana NToOneCoA 3) :: Fix (ListF Nat)B= 'Fix ('ConsF 3 ('Fix ('ConsF 2 ('Fix ('ConsF 1 ('Fix 'NilF))))))fcf-containersWrite the function to give a #, and feed it in together with an .2Check Fcf.Alg.List to see example algebras in use.fcf-containers)Commonly used name describing the method  eats.fcf-containers)Commonly used name describing the method  eats.fcf-containersStructure that , can fold and that is a result structure of .  CListF structure working with Algebras, ColAlgebras, and other stuff(c) gspia 2020-BSDgspiaSafe -.HUVDü fcf-containersType-level Unfoldr.Example-data ToThree :: Nat -> Exp (Maybe (Nat, Nat)):{ type instance Eval (ToThree b) = If (Eval (b Fcf.>= 4)) 'Nothing ('Just '(b, b TL.+ 1)):}:kind! Eval (Unfoldr ToThree 0)!Eval (Unfoldr ToThree 0) :: [Nat]= '[0, 1, 2, 3]=Note: Once Fcf releases a new version, I'll remove this, TODO fcf-containersConcatMap for lists.=Note: Once Fcf releases a new version, I'll remove this, TODO fcf-containersConcat for lists.Example2:kind! Eval (Concat ( '[ '[1,2], '[3,4], '[5,6]]))4Eval (Concat ( '[ '[1,2], '[3,4], '[5,6]])) :: [Nat]= '[1, 2, 3, 4, 5, 6]Q:kind! Eval (Concat ( '[ '[Int, Maybe Int], '[Maybe String, Either Double Int]]))QEval (Concat ( '[ '[Int, Maybe Int], '[Maybe String, Either Double Int]])) :: [*]4= '[Int, Maybe Int, Maybe String, Either Double Int]=Note: Once Fcf releases a new version, I'll remove this, TODO fcf-containers Type-level   for lists.Example:kind! Eval (Elem 1 '[1,2,3])Eval (Elem 1 '[1,2,3]) :: Bool= 'True:kind! Eval (Elem 1 '[2,3])Eval (Elem 1 '[2,3]) :: Bool= 'False=Note: Once Fcf releases a new version, I'll remove this, TODOfcf-containers PartitionExampleA:kind! Eval (Fcf.Alg.List.Partition ((>=) 35) '[ 20, 30, 40, 50])EEval (Fcf.Alg.List.Partition ((>=) 35) '[ 20, 30, 40, 50]) :: ([Nat],E [Nat])= '( '[20, 30], '[40, 50])fcf-containersSum a Nat-list.Example:kind! Eval (Sum '[1,2,3])Eval (Sum '[1,2,3]) :: Nat= 6fcf-containers8Example algebra to calculate the prod of Nats in a list.3:kind! Eval (Cata ProdAlg =<< ListToFix '[1,2,3,4])3Eval (Cata ProdAlg =<< ListToFix '[1,2,3,4]) :: Nat= 24fcf-containers7Example algebra to calculate the sum of Nats in a list.2:kind! Eval (Cata SumAlg =<< ListToFix '[1,2,3,4])2Eval (Cata SumAlg =<< ListToFix '[1,2,3,4]) :: Nat= 10fcf-containers)Example algebra to calculate list length.0:kind! Eval (Cata LenAlg =<< ListToFix '[1,2,3])0Eval (Cata LenAlg =<< ListToFix '[1,2,3]) :: Nat= 3fcf-containersŽListToFix can be used to turn a norma type-level list into the base functor type ListF, to be used with e.g. Cata. For examples in use, see  and .¡Ideally, we would have one ToFix type-level function for which we could give type instances for different type-level types, like lists, trees etc. See TODO.md.fcf-containers Base functor for a list of type [a].  :Map (association) data-type for the type-level programming(c) gspia 2020-BSDgspiaSafe -.HUVäÓfcf-containers PartitionExampleC:kind! Eval (Partition ((>=) 35) =<< FromList '[ '(5,50), '(3,30)])FEval (Partition ((>=) 35) =<< FromList '[ '(5,50), '(3,30)]) :: (MapC L Nat Nat, N MapC Nat Nat),= '( 'MapC '[ '(3, 30)], 'MapC '[ '(5, 50)])fcf-containers FilterWithKeyExampleE:kind! Eval (FilterWithKey (>=) (Eval (FromList '[ '(3,5), '(6,4)])))GEval (FilterWithKey (>=) (Eval (FromList '[ '(3,5), '(6,4)]))) :: MapC K Nat Nat= 'MapC '[ '(6, 4)]fcf-containersFilterExample@:kind! Eval (Filter ((>=) 35) =<< FromList '[ '(5,50), '(3,30)])BEval (Filter ((>=) 35) =<< FromList '[ '(5,50), '(3,30)]) :: MapC F Nat Nat= 'MapC '[ '(3, 30)]fcf-containersToListExample8:kind! Eval (ToList =<< FromList '[ '(5,"a"), '(3,"b")])<Eval (ToList =<< FromList '[ '(5,"a"), '(3,"b")]) :: [(Nat, B TL.Symbol)]= '[ '(5, "a"), '(3, "b")]:kind! Eval (ToList =<< Empty)#Eval (ToList =<< Empty) :: [(k, v)]= '[]fcf-containersAssocsExample8:kind! Eval (Assocs =<< FromList '[ '(5,"a"), '(3,"b")])<Eval (Assocs =<< FromList '[ '(5,"a"), '(3,"b")]) :: [(Nat, B TL.Symbol)]= '[ '(5, "a"), '(3, "b")]:kind! Eval (Assocs =<< Empty)#Eval (Assocs =<< Empty) :: [(k, v)]= '[]fcf-containersKeysExample6:kind! Eval (Keys =<< FromList '[ '(5,"a"), '(3,"b")])8Eval (Keys =<< FromList '[ '(5,"a"), '(3,"b")]) :: [Nat] = '[5, 3]:kind! Eval (Keys =<< Empty)Eval (Keys =<< Empty) :: [k]= '[]fcf-containersElemsExample7:kind! Eval (Elems =<< FromList '[ '(5,"a"), '(3,"b")])?Eval (Elems =<< FromList '[ '(5,"a"), '(3,"b")]) :: [TL.Symbol] = '["a", "b"]:kind! Eval (Elems =<< Empty)Eval (Elems =<< Empty) :: [v]= '[] fcf-containersFoldr{Fold the values in the map using the given right-associative binary operator, such that 'foldr f z == foldr f z . elems'.DNote: the order of values in MapC is not well defined at the moment.ExampleU:kind! Eval (Fcf.Data.MapC.Foldr (Pure2 (TL.+)) 0 =<< (FromList '[ '(1,1), '(2,2)]))UEval (Fcf.Data.MapC.Foldr (Pure2 (TL.+)) 0 =<< (FromList '[ '(1,1), '(2,2)])) :: Nat= 3$fcf-containersDisjointExampleh:kind! Eval (Disjoint (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")])))iEval (Disjoint (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")]))) :: Bool= 'Falseh:kind! Eval (Disjoint (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(2,"B"), '(7,"C")])))iEval (Disjoint (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(2,"B"), '(7,"C")]))) :: Bool= 'True0:kind! Eval (Disjoint (Eval Empty) (Eval Empty))1Eval (Disjoint (Eval Empty) (Eval Empty)) :: Bool= 'True&fcf-containers IntersectionExamplel:kind! Eval (Intersection (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")])))nEval (Intersection (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")]))) :: MapC o Nat t TL.Symbol= 'MapC '[ '(5, "b")](fcf-containers DifferenceExamplej:kind! Eval (Difference (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")])))lEval (Difference (Eval (FromList '[ '(3,"a"), '(5,"b")])) (Eval (FromList '[ '(5,"B"), '(7,"C")]))) :: MapC m Nat r TL.Symbol= 'MapC '[ '(3, "a")]*fcf-containersUnionExamplef:kind! Eval (Union (Eval (FromList '[ '(5,"a"), '(3,"b")])) (Eval (FromList '[ '(5,"A"), '(7,"c")])) )hEval (Union (Eval (FromList '[ '(5,"a"), '(3,"b")])) (Eval (FromList '[ '(5,"A"), '(7,"c")])) ) :: MapC i Nat n TL.Symbol+= 'MapC '[ '(7, "c"), '(5, "a"), '(3, "b")]+fcf-containersSizeExample6:kind! Eval (Size =<< FromList '[ '(5,"a"), '(3,"b")])6Eval (Size =<< FromList '[ '(5,"a"), '(3,"b")]) :: Nat= 2,fcf-containersNullExample6:kind! Eval (Null =<< FromList '[ '(5,"a"), '(3,"b")])7Eval (Null =<< FromList '[ '(5,"a"), '(3,"b")]) :: Bool= 'False:kind! Eval (Null =<< Empty)Eval (Null =<< Empty) :: Bool= 'True-fcf-containers NotMemberExampleB:kind! Eval (NotMember 5 (Eval (FromList '[ '(5,"a"), '(3,"b")])))CEval (NotMember 5 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Bool= 'FalseB:kind! Eval (NotMember 7 (Eval (FromList '[ '(5,"a"), '(3,"b")])))CEval (NotMember 7 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Bool= 'True.fcf-containersMemberExample?:kind! Eval (Member 5 (Eval (FromList '[ '(5,"a"), '(3,"b")])))@Eval (Member 5 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Bool= 'True?:kind! Eval (Member 7 (Eval (FromList '[ '(5,"a"), '(3,"b")])))@Eval (Member 7 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Bool= 'False/fcf-containersLookupExample?:kind! Eval (Lookup 5 (Eval (FromList '[ '(5,"a"), '(3,"b")])))BEval (Lookup 5 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Maybe G TL.Symbol = 'Just "a"?:kind! Eval (Lookup 7 (Eval (FromList '[ '(5,"a"), '(3,"b")])))BEval (Lookup 7 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: Maybe G TL.Symbol = 'Nothing1fcf-containersAdjustExample`:kind! Eval (Adjust (Pure1 (TL.AppendSymbol "new ")) 5 (Eval (FromList '[ '(5,"a"), '(3,"b")])))bEval (Adjust (Pure1 (TL.AppendSymbol "new ")) 5 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC c Nat h TL.Symbol$= 'MapC '[ '(5, "new a"), '(3, "b")]`:kind! Eval (Adjust (Pure1 (TL.AppendSymbol "new ")) 7 (Eval (FromList '[ '(5,"a"), '(3,"b")])))bEval (Adjust (Pure1 (TL.AppendSymbol "new ")) 7 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC c Nat h TL.Symbol = 'MapC '[ '(5, "a"), '(3, "b")]E:kind! Eval (Adjust (Pure1 (TL.AppendSymbol "new ")) 7 (Eval Empty))GEval (Adjust (Pure1 (TL.AppendSymbol "new ")) 7 (Eval Empty)) :: MapC Q Nat TL.Symbol = 'MapC '[]2fcf-containersDeleteExample?:kind! Eval (Delete 5 (Eval (FromList '[ '(5,"a"), '(3,"b")])))AEval (Delete 5 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC K Nat TL.Symbol= 'MapC '[ '(3, "b")]?:kind! Eval (Delete 7 (Eval (FromList '[ '(5,"a"), '(3,"b")])))AEval (Delete 7 (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC K Nat TL.Symbol = 'MapC '[ '(5, "a"), '(3, "b")]#:kind! Eval (Delete 7 (Eval Empty))*Eval (Delete 7 (Eval Empty)) :: MapC Nat v = 'MapC '[]4fcf-containers-InsertWith if old there, map if no old, addExamplea:kind! Eval (InsertWith (Pure2 TL.AppendSymbol) 5 "xxx" (Eval (FromList '[ '(5,"a"), '(3,"b")])))cEval (InsertWith (Pure2 TL.AppendSymbol) 5 "xxx" (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC d Nat i TL.Symbol#= 'MapC '[ '(5, "xxxa"), '(3, "b")]a:kind! Eval (InsertWith (Pure2 TL.AppendSymbol) 7 "xxx" (Eval (FromList '[ '(5,"a"), '(3,"b")])))cEval (InsertWith (Pure2 TL.AppendSymbol) 7 "xxx" (Eval (FromList '[ '(5,"a"), '(3,"b")]))) :: MapC d Nat i TL.Symbol-= 'MapC '[ '(5, "a"), '(3, "b"), '(7, "xxx")]B:kind! Eval (InsertWith (Pure2 TL.AppendSymbol) 5 "xxx" =<< Empty)DEval (InsertWith (Pure2 TL.AppendSymbol) 5 "xxx" =<< Empty) :: MapC N Nat TL.Symbol= 'MapC '[ '(5, "xxx")]5fcf-containersInsertExampleD:kind! Eval (Insert 3 "hih" =<< FromList '[ '(1,"haa"), '(2,"hoo")])FEval (Insert 3 "hih" =<< FromList '[ '(1,"haa"), '(2,"hoo")]) :: MapC P Nat TL.Symbol1= 'MapC '[ '(3, "hih"), '(1, "haa"), '(2, "hoo")]6fcf-containers6Use FromList to construct a MapC from type-level list.Example1:kind! Eval (FromList '[ '(1,"haa"), '(2,"hoo")])@Eval (FromList '[ '(1,"haa"), '(2,"hoo")]) :: MapC Nat TL.Symbol$= 'MapC '[ '(1, "haa"), '(2, "hoo")]7fcf-containers SingletonExample:kind! Eval (Singleton 1 "haa").Eval (Singleton 1 "haa") :: MapC Nat TL.Symbol= 'MapC '[ '(1, "haa")]8fcf-containersEmptyExample):kind! (Eval Empty :: MapC Nat TL.Symbol)8(Eval Empty :: MapC Nat TL.Symbol) :: MapC Nat TL.Symbol = 'MapC '[]&:kind! (Eval Empty :: MapC Int String)2(Eval Empty :: MapC Int String) :: MapC Int [Char] = 'MapC '[]+See also the other examples in this module.9fcf-containers‚A type corresponding to Map in the containers. We call this MapC because name Map is reserved to the map-function in Fcf-package.áThe representation is based on type-level lists. Please, do not use that fact but rather use the exposed API. (We hope to change the internal data type to balanced tree similar to the one used in containers. See TODO.md.)# !"#$%&'()*+,-./0123456789:#9:876543210/.-,+*)('&%$#"! -Set data-structure for type-level programming(c) gspia 2020-BSDgspiaSafe -.HUV¹ <fcf-containers IntersectionExampleN:kind! Eval (Intersection (Eval (FromList '[3, 5])) (Eval (FromList '[5, 7])))OEval (Intersection (Eval (FromList '[3, 5])) (Eval (FromList '[5, 7]))) :: Set P Nat = 'Set '[5]>fcf-containers DifferenceExampleL:kind! Eval (Difference (Eval (FromList '[3, 5])) (Eval (FromList '[5, 7])))MEval (Difference (Eval (FromList '[3, 5])) (Eval (FromList '[5, 7]))) :: Set N Nat = 'Set '[3]@fcf-containersUnionExampleH:kind! Eval (Union (Eval (FromList '[5, 3])) (Eval (FromList '[5, 7])) )IEval (Union (Eval (FromList '[5, 3])) (Eval (FromList '[5, 7])) ) :: Set J Nat= 'Set '[7, 5, 3]Afcf-containersSizeExample':kind! Eval (Size =<< FromList '[5, 3])'Eval (Size =<< FromList '[5, 3]) :: Nat= 2Bfcf-containersNullExample':kind! Eval (Null =<< FromList '[5, 3])(Eval (Null =<< FromList '[5, 3]) :: Bool= 'False:kind! Eval (Null =<< Empty)Eval (Null =<< Empty) :: Bool= 'TrueCfcf-containers NotMemberExample.:kind! Eval (NotMember 5 =<< FromList '[5, 3])/Eval (NotMember 5 =<< FromList '[5, 3]) :: Bool= 'False.:kind! Eval (NotMember 7 =<< FromList '[5, 3])/Eval (NotMember 7 =<< FromList '[5, 3]) :: Bool= 'TrueDfcf-containersMemberExample+:kind! Eval (Member 5 =<< FromList '[5, 3]),Eval (Member 5 =<< FromList '[5, 3]) :: Bool= 'True+:kind! Eval (Member 7 =<< FromList '[5, 3]),Eval (Member 7 =<< FromList '[5, 3]) :: Bool= 'FalseEfcf-containersDeleteExample+:kind! Eval (Delete 5 =<< FromList '[5, 3])/Eval (Delete 5 =<< FromList '[5, 3]) :: Set Nat = 'Set '[3]+:kind! Eval (Delete 7 =<< FromList '[5, 3])/Eval (Delete 7 =<< FromList '[5, 3]) :: Set Nat= 'Set '[5, 3]Ffcf-containersInsertExample+:kind! Eval (Insert 3 =<< FromList '[1, 2])/Eval (Insert 3 =<< FromList '[1, 2]) :: Set Nat= 'Set '[3, 1, 2]+:kind! Eval (Insert 2 =<< FromList '[1, 2])/Eval (Insert 2 =<< FromList '[1, 2]) :: Set Nat= 'Set '[1, 2]Gfcf-containers5Use FromList to construct a Set from type-level list.Example:kind! Eval (FromList '[1, 2])"Eval (FromList '[1, 2]) :: Set Nat= 'Set '[1, 2]Hfcf-containers SingletonExample:kind! Eval (Singleton 1)Eval (Singleton 1) :: Set Nat = 'Set '[1]Ifcf-containersEmptyExample:kind! (Eval Empty :: Set Nat)"(Eval Empty :: Set Nat) :: Set Nat = 'Set '[]+See also the other examples in this module.Jfcf-containersSet-definition.;<=>?@ABCDEFGHIJKJKIHGFEDCBA@?>=<;.Tree data-structure for type-level programming(c) gspia 2020-BSDgspiaSafe -.HUV&ò Lfcf-containersGet the levels from a W.Example_:kind! Eval (Levels ('Node 1 '[ 'Node 2 '[ 'Node 3 '[ 'Node 4 '[]]], 'Node 5 '[ 'Node 6 '[]]]))cEval (Levels ('Node 1 '[ 'Node 2 '[ 'Node 3 '[ 'Node 4 '[]]], 'Node 5 '[ 'Node 6 '[]]])) :: [[Nat]]"= '[ '[1], '[2, 5], '[3, 6], '[4]]Nfcf-containersGet the forests from a list of Ws.Ofcf-containers"Get the root nodes from a list of Ws.Pfcf-containersGet the forest from a W.Qfcf-containersGet the root node from a W.Rfcf-containers Flatten a W.Example`:kind! Eval (Flatten ('Node 1 '[ 'Node 2 '[ 'Node 3 '[ 'Node 4 '[]]], 'Node 5 '[ 'Node 6 '[]]]))bEval (Flatten ('Node 1 '[ 'Node 2 '[ 'Node 3 '[ 'Node 4 '[]]], 'Node 5 '[ 'Node 6 '[]]])) :: [Nat]= '[1, 2, 3, 4, 5, 6]Sfcf-containers Unfold for a V.Tfcf-containers Unfold for a W.Example(data BuildNode :: Nat -> Exp (Nat,[Nat]):{$ type instance Eval (BuildNode x) =( If (Eval ((2 TL.* x TL.+ 1) >= 8)) '(x, '[])/ '(x, '[2 TL.* x, (2 TL.* x) TL.+ 1 ]):}$:kind! Eval (UnfoldTree BuildNode 1))Eval (UnfoldTree BuildNode 1) :: Tree Nat= 'Node 1, '[ 'Node 2 '[ 'Node 4 '[], 'Node 5 '[]],, 'Node 3 '[ 'Node 6 '[], 'Node 7 '[]]]Ufcf-containersFold a type-level W.Vfcf-containersWSame as in containers, except not used for any term-level computation in this module.Wfcf-containersWSame as in containers, except not used for any term-level computation in this module. LMNOPQRSTUVWX WXVUTSRQPONMLCTree-structures working with Algebras, ColAlgebras, and other stuff(c) gspia 2020-BSDgspiaSafe -.HUVF’ Zfcf-containers%Qsort - give the comparison function a -> a -> Exp BoolC comparing your list elements and then Qsort will order the list.Example(:kind! Eval (Qsort (<) '[5,3,1,9,4,6,3])*Eval (Qsort (<) '[5,3,1,9,4,6,3]) :: [Nat]= '[1, 3, 3, 4, 5, 6, 9]B:kind! Eval (Qsort SymbolCompareInc '[ "bb", "e", "a", "e", "d" ])JEval (Qsort SymbolCompareInc '[ "bb", "e", "a", "e", "d" ]) :: [TL.Symbol]= '["a", "bb", "d", "e", "e"]\fcf-containers;Use this if you want to sort symbols into decreasing order.]fcf-containers;Use this if you want to sort symbols into increasing order._fcf-containersRBTreeF is a btree functor. At the moment, it is used to build sorting algorithms.bfcf-containers#Fibonaccis with Hylo, not efficientExample:kind! Eval (Fib 10)Eval (Fib 10) :: Nat= 55cfcf-containersCoAlgebra for the Fib-function.dfcf-containersMCoAlgebra to build TreeF's. This is an example from containers-package. See e and example in there.Q:kind! Eval (Ana BuildNodeCoA 1) :kind! Eval (Hylo CountNodesAlg BuildNodeCoA 1)efcf-containers.Size of the Tree is the number of nodes in it.ExampleSize is defined as % Cata CountNodesAlg =<< TreeToFix tr & and can be used with the following. (data BuildNode :: Nat -> Exp (Nat,[Nat]):{$ type instance Eval (BuildNode x) =( If (Eval ((2 TL.* x TL.+ 1) >= 8)) '(x, '[])0 '(x, '[ 2 TL.* x, (2 TL.* x) TL.+ 1 ]):}-:kind! Eval (Size =<< UnfoldTree BuildNode 1)-Eval (Size =<< UnfoldTree BuildNode 1) :: Nat= 7ffcf-containersCount the nodes of TreeF. See the e for an example.gfcf-containers(Sum the nodes of TreeF containing Nats. See the implementation of b for an example.hfcf-containersVA function to transform a Tree into fixed structure that can be used by Cata and Ana.See the implementation of e for an example.ifcf-containersi is functor for Ws. i! has Map-instance (on structure).YZ[\]^_a`bcdefghijijhgfedcb_a`^]\[ZYk      !"#$%&'()*+,-./0123456789:;<=>>*+,-./01237:;<=??@ABCDEFGHIJKLMNOPQRSTUVWX0YZ[\]^fcf-containers-0.1.0-inplaceFcf.Alg.Morphism Fcf.Alg.List Fcf.Data.MapC Fcf.Data.Set Fcf.Data.Tree Fcf.Alg.TreeSecondFirstHyloAnaCata CoAlgebraAlgebraFix UnfoldrCaseUnfoldr ConcatMapConcatElemPartHelp PartitionSumProdAlgSumAlgLenAlg ListToFixListFConsFNilF PartitionHlp FilterWithKeyFilterToListAssocsKeysElemsFoldrMWKhelp MapWithKeyMapDisjointInterMem Intersection DiffNotMem DifferenceUCombUnionSizeNull NotMemberMemberLookup AdjustHelpAdjustDelete InsWithHelp InsertWithInsertFromList SingletonEmptyMapCSetLevels SubFLevels GetForestsGetRoots GetForestGetRootFlatten UnfoldForest UnfoldTreeFoldTreeForestTreeNodePartCmpQsortInordSymbolCompareDecSymbolCompareIncPartHlpBTreeFBEmptyFBNodeFFibBuildFibTreeCoA BuildNodeCoA CountNodesAlg SumNodesAlg TreeToFixTreeFNodeF