úÎ#S›Mãh      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg$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 -.HUV;9 fcf-containers5Give true if any of the booleans in the list is true.Example":kind! Eval (Any '[ 'True, 'True])#Eval (Any '[ 'True, 'True]) :: Bool= 'True$:kind! Eval (Any '[ 'False, 'False])%Eval (Any '[ 'False, 'False]) :: Bool= 'False fcf-containers6Give true if all of the booleans in the list are true.Example":kind! Eval (All '[ 'True, 'True])#Eval (All '[ 'True, 'True]) :: Bool= 'True*:kind! Eval (All '[ 'True, 'True, 'False])+Eval (All '[ 'True, 'True, 'False]) :: Bool= 'False fcf-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 FilterWithKeyExample@:kind! Eval (FilterWithKey (>=) =<< FromList '[ '(3,5), '(6,4)])AEval (FilterWithKey (>=) =<< FromList '[ '(3,5), '(6,4)]) :: MapCF 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, ? 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, ? 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")]) :: [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.ExampleJ:kind! Eval (Fcf.Data.MapC.Foldr (+) 0 =<< (FromList '[ '(1,1), '(2,2)]))JEval (Fcf.Data.MapC.Foldr (+) 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 q 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 o 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 k 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 NotMemberExample=:kind! Eval (NotMember 5 =<< FromList '[ '(5,"a"), '(3,"b")])>Eval (NotMember 5 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Bool= 'False=:kind! Eval (NotMember 7 =<< FromList '[ '(5,"a"), '(3,"b")])>Eval (NotMember 7 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Bool= 'True'fcf-containersMemberExample::kind! Eval (Member 5 =<< FromList '[ '(5,"a"), '(3,"b")]);Eval (Member 5 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Bool= 'True::kind! Eval (Member 7 =<< FromList '[ '(5,"a"), '(3,"b")]);Eval (Member 7 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Bool= 'False(fcf-containersLookupExample::kind! Eval (Lookup 5 =<< FromList '[ '(5,"a"), '(3,"b")])CEval (Lookup 5 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Maybe Symbol = 'Just "a"::kind! Eval (Lookup 7 =<< FromList '[ '(5,"a"), '(3,"b")])CEval (Lookup 7 =<< FromList '[ '(5,"a"), '(3,"b")]) :: Maybe Symbol = 'Nothing)fcf-containersAdjustExampleJ:kind! Eval (Adjust (Append "new ") 5 =<< FromList '[ '(5,"a"), '(3,"b")])KEval (Adjust (Append "new ") 5 =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCS Nat Symbol$= 'MapC '[ '(5, "new a"), '(3, "b")]J:kind! Eval (Adjust (Append "new ") 7 =<< FromList '[ '(5,"a"), '(3,"b")])KEval (Adjust (Append "new ") 7 =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCS Nat Symbol = 'MapC '[ '(5, "a"), '(3, "b")]0:kind! Eval (Adjust (Append "new ") 7 =<< Empty)<Eval (Adjust (Append "new ") 7 =<< Empty) :: MapC Nat Symbol = 'MapC '[]*fcf-containersDeleteExample::kind! Eval (Delete 5 =<< FromList '[ '(5,"a"), '(3,"b")]);Eval (Delete 5 =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCC Nat Symbol= 'MapC '[ '(3, "b")]::kind! Eval (Delete 7 =<< FromList '[ '(5,"a"), '(3,"b")]);Eval (Delete 7 =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCC Nat Symbol = 'MapC '[ '(5, "a"), '(3, "b")] :kind! Eval (Delete 7 =<< Empty)'Eval (Delete 7 =<< Empty) :: MapC Nat v = 'MapC '[]+fcf-containers-InsertWith if old there, map if no old, addExampleK:kind! Eval (InsertWith Append 5 "xxx" =<< FromList '[ '(5,"a"), '(3,"b")])LEval (InsertWith Append 5 "xxx" =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCT Nat Symbol#= 'MapC '[ '(5, "xxxa"), '(3, "b")]K:kind! Eval (InsertWith Append 7 "xxx" =<< FromList '[ '(5,"a"), '(3,"b")])LEval (InsertWith Append 7 "xxx" =<< FromList '[ '(5,"a"), '(3,"b")]) :: MapCT Nat Symbol-= 'MapC '[ '(5, "a"), '(3, "b"), '(7, "xxx")]1:kind! Eval (InsertWith Append 7 "xxx" =<< Empty)=Eval (InsertWith Append 7 "xxx" =<< Empty) :: MapC Nat Symbol= 'MapC '[ '(7, "xxx")],fcf-containersInsertExampleD:kind! Eval (Insert 3 "hih" =<< FromList '[ '(1,"haa"), '(2,"hoo")])FEval (Insert 3 "hih" =<< FromList '[ '(1,"haa"), '(2,"hoo")]) :: MapC M Nat Symbol1= 'MapC '[ '(3, "hih"), '(1, "haa"), '(2, "hoo")]-fcf-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 Symbol$= 'MapC '[ '(1, "haa"), '(2, "hoo")].fcf-containers SingletonExample:kind! Eval (Singleton 1 "haa")+Eval (Singleton 1 "haa") :: MapC Nat Symbol= 'MapC '[ '(1, "haa")]/fcf-containersEmptyExample&:kind! (Eval Empty :: MapC Nat Symbol)2(Eval Empty :: MapC Nat Symbol) :: MapC Nat 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.0fcf-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.) !"#$%&'()*+,-./0101%$('& /.,+*#"!)--Set data-structure for type-level programming(c) gspia 2020-BSDgspiaSafe -.HUV[2fcf-containers#Get the type-level list out of the @.Example7:kind! Eval (ToList =<< PowerSet =<< FromList '[1,2,3])=Eval (ToList =<< PowerSet =<< FromList '[1,2,3]) :: [Set Nat]== '[ 'Set '[], 'Set '[3], 'Set '[2], 'Set '[2, 3], 'Set '[1],1 'Set '[1, 2], 'Set '[1, 3], 'Set '[1, 2, 3]]3fcf-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]4fcf-containersYCalculate the power sets of a given type-level list. The algorithm is based Gray codes.Example4:kind! Eval (PowerSet =<< FromList '["a", "b", "c"])AEval (PowerSet =<< FromList '["a", "b", "c"]) :: Set (Set Symbol)= 'Set< '[ 'Set '[], 'Set '["c"], 'Set '["b"], 'Set '["b", "c"],7 'Set '["a"], 'Set '["a", "b"], 'Set '["a", "c"], 'Set '["a", "b", "c"]];:kind! Eval (PowerSet =<< FromList '[Int, Char, Maybe Int])CEval (PowerSet =<< FromList '[Int, Char, Maybe Int]) :: Set (Set *)= 'Set1 '[ 'Set '[], 'Set '[Maybe Int], 'Set '[Char],? 'Set '[Char, Maybe Int], 'Set '[Int], 'Set '[Int, Char],< 'Set '[Int, Maybe Int], 'Set '[Int, Char, Maybe Int]]5fcf-containersType-level set intersection.ExampleN: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]6fcf-containersType-level set difference.ExampleL: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]7fcf-containersType-level set union.ExampleH: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]8fcf-containersSizeExample':kind! Eval (Size =<< FromList '[5, 3])'Eval (Size =<< FromList '[5, 3]) :: Nat= 29fcf-containersNullExample':kind! Eval (Null =<< FromList '[5, 3])(Eval (Null =<< FromList '[5, 3]) :: Bool= 'False:kind! Eval (Null =<< Empty)Eval (Null =<< Empty) :: Bool= 'True:fcf-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= 'True;fcf-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= 'False<fcf-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]=fcf-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]>fcf-containers SingletonExample:kind! Eval (Singleton 1)Eval (Singleton 1) :: Set Nat = 'Set '[1]?fcf-containersEmptyExample:kind! (Eval Empty :: Set Nat)"(Eval Empty :: Set Nat) :: Set Nat = 'Set '[]+See also the other examples in this module.@fcf-containersSet-definition.23456789:;<=>?@A@A;:98?>=<476532Type level symbols(c) gspia 2020-BSDgspiaSafe -.HUV–Bfcf-containersEquality of symbolsExample:kind! Eval ("b" == "a")Eval ("b" == "a") :: Bool= 'FalseCfcf-containers#Larger-than comparison for symbols.Example:kind! Eval ("b" > "a")Eval ("b" > "a") :: Bool= 'TrueDfcf-containers!Less-than comparison for symbols.Example:kind! Eval ("a" < "b")Eval ("a" < "b") :: Bool= 'TrueEfcf-containers,Larger-than-or-equal comparison for symbols.Example:kind! Eval ("b" >= "a")Eval ("b" >= "a") :: Bool= 'TrueFfcf-containers*Less-than-or-equal comparison for symbols.Example:kind! Eval ("b" <= "a")Eval ("b" <= "a") :: Bool= 'FalseGfcf-containersIntercalate type-level symbols.Example1:kind! Eval (Intercalate "+" '["aa", "bb", "cc"])4Eval (Intercalate "+" '["aa", "bb", "cc"]) :: Symbol = "aa+bb+cc"%:kind! Eval (Intercalate "+" '["aa"])(Eval (Intercalate "+" '["aa"]) :: Symbol= "aa"!:kind! Eval (Intercalate "+" '[])$Eval (Intercalate "+" '[]) :: Symbol= ""Hfcf-containersAppend two type-level symbols.Example :kind! Eval (Append "hmm" " ok")#Eval (Append "hmm" " ok") :: Symbol = "hmm ok"BCDEFGHHGFEDCB.Tree data-structure for type-level programming(c) gspia 2020-BSDgspiaSafe -.HUV-¨ Ifcf-containersGet the levels from a T.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]]Kfcf-containersGet the forests from a list of Ts.Lfcf-containers"Get the root nodes from a list of Ts.Mfcf-containersGet the forest from a T.Nfcf-containersGet the root node from a T.Ofcf-containers Flatten a T.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]Pfcf-containers Unfold for a S.Qfcf-containers Unfold for a T.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 '[]]]Rfcf-containersFold a type-level T.Sfcf-containersWSame as in containers, except not used for any term-level computation in this module.Tfcf-containersWSame as in containers, except not used for any term-level computation in this module. IJKLMNOPQRSTU TUSRQPONMLKJICTree-structures working with Algebras, ColAlgebras, and other stuff(c) gspia 2020-BSDgspiaSafe -.HUVMO Wfcf-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"]Yfcf-containers;Use this if you want to sort symbols into decreasing order.Zfcf-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._fcf-containers#Fibonaccis with Hylo, not efficientExample:kind! Eval (Fib 10)Eval (Fib 10) :: Nat= 55`fcf-containersCoAlgebra for the Fib-function.afcf-containersMCoAlgebra to build TreeF's. This is an example from containers-package. See b and example in there.Q:kind! Eval (Ana BuildNodeCoA 1) :kind! Eval (Hylo CountNodesAlg BuildNodeCoA 1)bfcf-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= 7cfcf-containersCount the nodes of TreeF. See the b for an example.dfcf-containers(Sum the nodes of TreeF containing Nats. See the implementation of _ for an example.efcf-containersVA function to transform a Tree into fixed structure that can be used by Cata and Ana.See the implementation of b for an example.ffcf-containersf is functor for Ts. f! has Map-instance (on structure).VWXYZ[\^]_`abcdefgfgedcba`_\^][ZYXWVh      !"#$%&'()*+,-./0123456788!59)*+,-./2467::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ,[\]^_`fcf-containers-0.2.0-inplaceFcf.Data.SymbolFcf.Alg.Morphism Fcf.Alg.List Fcf.Data.MapC Fcf.Data.Set Fcf.Data.Tree Fcf.Alg.Treeghc-prim GHC.TypesSymbolSecondFirstHyloAnaCata CoAlgebraAlgebraFixAnyAllPartHelp PartitionSumProdAlgSumAlgLenAlg ListToFixListFConsFNilF FilterWithKeyFilterToListAssocsKeysElemsFoldr MapWithKeyMapDisjoint Intersection DifferenceUnionSizeNull NotMemberMemberLookupAdjustDelete InsertWithInsertFromList SingletonEmptyMapCPowerSetSet==><>=<= IntercalateAppendLevels SubFLevels GetForestsGetRoots GetForestGetRootFlatten UnfoldForest UnfoldTreeFoldTreeForestTreeNodePartCmpQsortInordSymbolCompareDecSymbolCompareIncPartHlpBTreeFBEmptyFBNodeFFibBuildFibTreeCoA BuildNodeCoA CountNodesAlg SumNodesAlg TreeToFixTreeFNodeF